@hasna/skills 0.1.62 → 0.1.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/README.md +10 -6
- package/bin/index.js +14271 -21602
- package/bin/mcp.js +3527 -11449
- package/bin/migrate.js +53 -3
- package/bin/server.js +5140 -2675
- package/bin/worker.js +4542 -2129
- package/dist/cli/commands/publish.d.ts +2 -0
- package/dist/cli/components/App.d.ts +2 -1
- package/dist/cli/components/CategorySelect.d.ts +2 -1
- package/dist/cli/components/Header.d.ts +2 -1
- package/dist/cli/components/InstallProgress.d.ts +2 -1
- package/dist/cli/components/SearchView.d.ts +2 -1
- package/dist/cli/components/SkillSelect.d.ts +2 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +5094 -13755
- package/dist/lib/agent-sync.d.ts +38 -3
- package/dist/lib/home-adoption.d.ts +91 -0
- package/dist/lib/home-census.d.ts +22 -0
- package/dist/lib/home-migration.d.ts +61 -0
- package/dist/lib/portable-skills-files.d.ts +21 -1
- package/dist/lib/portable-skills-types.d.ts +46 -0
- package/dist/lib/pull.d.ts +66 -0
- package/dist/lib/remote-client.d.ts +6 -0
- package/dist/lib/run-state.d.ts +5 -0
- package/dist/lib/skill-bundles.d.ts +54 -0
- package/dist/lib/skill-contract.d.ts +35 -0
- package/dist/lib/skill-hash.d.ts +77 -0
- package/dist/sdk/cancel.d.ts +30 -0
- package/dist/sdk/dispatcher.d.ts +40 -0
- package/dist/sdk/event-sink.d.ts +2 -0
- package/dist/sdk/events.d.ts +79 -0
- package/dist/sdk/execution/admission.d.ts +44 -0
- package/dist/sdk/execution/dispatchers/e2b.d.ts +17 -0
- package/dist/sdk/execution/dispatchers/ecs.d.ts +151 -0
- package/dist/sdk/execution/image-profile.d.ts +73 -0
- package/dist/sdk/execution/index.d.ts +15 -0
- package/dist/sdk/execution/receipts.d.ts +44 -0
- package/dist/sdk/execution/state-machine.d.ts +38 -0
- package/dist/sdk/execution/storage.d.ts +158 -0
- package/dist/sdk/execution/types.d.ts +130 -0
- package/dist/sdk/executor.d.ts +17 -0
- package/dist/sdk/governance-store.d.ts +156 -0
- package/dist/sdk/governance.d.ts +92 -0
- package/dist/sdk/index.d.ts +26 -0
- package/dist/sdk/index.js +48730 -0
- package/dist/sdk/offline.d.ts +16 -0
- package/dist/sdk/outputs.d.ts +71 -0
- package/dist/sdk/registry.d.ts +28 -0
- package/dist/sdk/runs.d.ts +229 -0
- package/dist/sdk/server.d.ts +35 -0
- package/dist/sdk/spend.d.ts +36 -0
- package/dist/sdk/storage.d.ts +25 -0
- package/dist/server/app.d.ts +42 -0
- package/dist/server/artifact-storage.d.ts +102 -0
- package/dist/server/auth.d.ts +5 -0
- package/dist/server/config.d.ts +40 -0
- package/dist/server/database-url.d.ts +42 -0
- package/dist/server/handlers.d.ts +3 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/migrate.d.ts +13 -0
- package/dist/server/migrations-dir.d.ts +18 -0
- package/dist/server/redaction.d.ts +1 -0
- package/dist/server/registry.d.ts +5 -0
- package/dist/server/rows.d.ts +23 -0
- package/dist/server/skills-api.d.ts +68 -0
- package/dist/server/sqlite-store.d.ts +114 -0
- package/dist/server/store-fixtures.d.ts +25 -0
- package/dist/server/store.d.ts +144 -0
- package/dist/server/types.d.ts +242 -0
- package/dist/server/worker.d.ts +4 -0
- package/dist/storage.js +32 -0
- package/docs/skill-standard.md +211 -39
- package/migrations/postgres/0003_run_outputs_governance.sql +83 -0
- package/migrations/sqlite/0003_run_outputs_governance.sql +58 -0
- package/package.json +11 -8
- package/schemas/skill.schema.json +181 -0
- package/agent-skills/README.md +0 -41
- package/agent-skills/fleet-package-rollout/SKILL.md +0 -169
- package/agent-skills/inbox/SKILL.md +0 -25
- package/agent-skills/inbox/scripts/inbox +0 -109
- package/agent-skills/inbox/tests/test_registered_sender_id.sh +0 -92
- package/agent-skills/inbox-monitor/SKILL.md +0 -41
- package/agent-skills/inbox-monitor/scripts/inbox_monitor.sh +0 -91
- package/agent-skills/inbox-monitor/scripts/test_inbox_monitor.sh +0 -71
- package/agent-skills/merge-pr/SKILL.md +0 -85
- package/agent-skills/merge-pr/references/merge-safety.md +0 -82
- package/agent-skills/merge-pr/scripts/merge_pr_guard.py +0 -694
- package/agent-skills/merge-pr/scripts/test_merge_pr_guard.py +0 -647
- package/agent-skills/merge-pr/tests/fixtures/multi-commit-synthesized.json +0 -28
- package/agent-skills/merge-pr/tests/fixtures/trailer-free-provider.json +0 -28
- package/agent-skills/skill-goal-execute/SKILL.md +0 -115
- package/agent-skills/skill-login/SKILL.md +0 -109
- package/agent-skills/skill-project-create/SKILL.md +0 -91
- package/agent-skills/skill-publish/SKILL.md +0 -254
- package/agent-skills/skill-publish/scripts/capture_registry.js +0 -47
- package/agent-skills/skill-publish/scripts/publish_with_git_head.sh +0 -143
- package/agent-skills/skill-publish/scripts/test_publish_with_git_head.sh +0 -231
- package/skills/_common/auth.ts +0 -45
- package/skills/_common/http-client.ts +0 -143
- package/skills/_common/index.ts +0 -26
- package/skills/_common/install.sh +0 -7
- package/skills/_common/installer.ts +0 -72
- package/skills/_common/skill-install.ts +0 -37
- package/skills/_common/vision.ts +0 -374
- package/skills/ad-creative-pack/SKILL.md +0 -55
- package/skills/ad-creative-pack/package.json +0 -10
- package/skills/analyze-data/CLAUDE.md +0 -16
- package/skills/analyze-data/SKILL.md +0 -112
- package/skills/analyze-data/package.json +0 -23
- package/skills/analyze-data/src/analysis.ts +0 -401
- package/skills/analyze-data/src/cli.ts +0 -66
- package/skills/analyze-data/src/formatters.ts +0 -235
- package/skills/analyze-data/src/index.ts +0 -74
- package/skills/analyze-data/src/logger.ts +0 -36
- package/skills/analyze-data/src/parsers.ts +0 -57
- package/skills/analyze-data/src/stats.ts +0 -151
- package/skills/analyze-data/src/types.ts +0 -85
- package/skills/analyze-data/tsconfig.json +0 -19
- package/skills/api-docs-portal/SKILL.md +0 -84
- package/skills/api-docs-portal/package.json +0 -35
- package/skills/api-docs-portal/src/index.ts +0 -919
- package/skills/api-docs-portal/tsconfig.json +0 -17
- package/skills/api-test-suite/CLAUDE.md +0 -19
- package/skills/api-test-suite/package.json +0 -27
- package/skills/api-test-suite/src/index.ts +0 -381
- package/skills/api-test-suite/tsconfig.json +0 -10
- package/skills/audio-extract/CLAUDE.md +0 -9
- package/skills/audio-extract/SKILL.md +0 -73
- package/skills/audio-extract/package.json +0 -23
- package/skills/audio-extract/src/index.ts +0 -323
- package/skills/audio-extract/tsconfig.json +0 -11
- package/skills/bio-sequence-tool/CLAUDE.md +0 -19
- package/skills/bio-sequence-tool/package.json +0 -27
- package/skills/bio-sequence-tool/src/index.ts +0 -85
- package/skills/bio-sequence-tool/tsconfig.json +0 -10
- package/skills/blog-article/CLAUDE.md +0 -12
- package/skills/blog-article/SKILL.md +0 -55
- package/skills/blog-article/package.json +0 -10
- package/skills/blog-article/tsconfig.json +0 -10
- package/skills/brand-assets/SKILL.md +0 -118
- package/skills/brand-assets/package.json +0 -35
- package/skills/brand-assets/src/cli.ts +0 -155
- package/skills/brand-assets/src/constants.ts +0 -8
- package/skills/brand-assets/src/extract.ts +0 -236
- package/skills/brand-assets/src/index.ts +0 -668
- package/skills/brand-assets/src/types.ts +0 -59
- package/skills/brand-assets/tsconfig.json +0 -17
- package/skills/brand-kit/SKILL.md +0 -54
- package/skills/brand-kit/package.json +0 -10
- package/skills/businessactivity/CLAUDE.md +0 -176
- package/skills/businessactivity/LICENSE +0 -192
- package/skills/businessactivity/README.md +0 -287
- package/skills/businessactivity/package.json +0 -25
- package/skills/businessactivity/scripts/publish.ts +0 -210
- package/skills/businessactivity/src/commands/activity.ts +0 -211
- package/skills/businessactivity/src/commands/function.ts +0 -227
- package/skills/businessactivity/src/commands/owner.ts +0 -193
- package/skills/businessactivity/src/commands/profile.ts +0 -121
- package/skills/businessactivity/src/commands/responsibility.ts +0 -264
- package/skills/businessactivity/src/commands/team.ts +0 -244
- package/skills/businessactivity/src/commands/workflow.ts +0 -359
- package/skills/businessactivity/src/index.ts +0 -3
- package/skills/businessactivity/src/lib/config.ts +0 -167
- package/skills/businessactivity/src/lib/output.ts +0 -76
- package/skills/businessactivity/src/lib/paths.ts +0 -79
- package/skills/businessactivity/src/lib/storage.ts +0 -95
- package/skills/businessactivity/src/types/index.ts +0 -86
- package/skills/businessactivity/tsconfig.json +0 -29
- package/skills/codefix/LICENSE +0 -192
- package/skills/codefix/README.md +0 -232
- package/skills/codefix/SKILL.md +0 -94
- package/skills/codefix/package.json +0 -21
- package/skills/codefix/src/fixers/batch.ts +0 -213
- package/skills/codefix/src/fixers/detector.ts +0 -160
- package/skills/codefix/src/fixers/index.ts +0 -7
- package/skills/codefix/src/fixers/runner.ts +0 -522
- package/skills/codefix/src/index-local.ts +0 -431
- package/skills/codefix/src/index.ts +0 -4
- package/skills/codefix/src/types.ts +0 -211
- package/skills/codefix/tsconfig.json +0 -15
- package/skills/commitpush/SKILL.md +0 -57
- package/skills/commitpush/package.json +0 -33
- package/skills/commitpush/src/index.ts +0 -34
- package/skills/commitpush/tsconfig.json +0 -17
- package/skills/commitpushpr/SKILL.md +0 -55
- package/skills/commitpushpr/package.json +0 -33
- package/skills/commitpushpr/src/index.ts +0 -34
- package/skills/commitpushpr/tsconfig.json +0 -17
- package/skills/compress-video/CLAUDE.md +0 -9
- package/skills/compress-video/SKILL.md +0 -79
- package/skills/compress-video/package.json +0 -23
- package/skills/compress-video/src/index.ts +0 -473
- package/skills/compress-video/tsconfig.json +0 -11
- package/skills/contract-review-report/SKILL.md +0 -52
- package/skills/contract-review-report/package.json +0 -10
- package/skills/customer-feedback-report/SKILL.md +0 -52
- package/skills/customer-feedback-report/package.json +0 -10
- package/skills/dashboard-builder/CLAUDE.md +0 -19
- package/skills/dashboard-builder/package.json +0 -29
- package/skills/dashboard-builder/src/index.ts +0 -150
- package/skills/dashboard-builder/tsconfig.json +0 -10
- package/skills/data-anonymizer/CLAUDE.md +0 -19
- package/skills/data-anonymizer/package.json +0 -27
- package/skills/data-anonymizer/src/index.ts +0 -183
- package/skills/data-anonymizer/tsconfig.json +0 -10
- package/skills/database-explorer/CLAUDE.md +0 -19
- package/skills/database-explorer/package.json +0 -29
- package/skills/database-explorer/src/index.ts +0 -95
- package/skills/database-explorer/tsconfig.json +0 -10
- package/skills/diff-viewer/CLAUDE.md +0 -19
- package/skills/diff-viewer/package.json +0 -30
- package/skills/diff-viewer/src/index.ts +0 -164
- package/skills/diff-viewer/tsconfig.json +0 -10
- package/skills/doc-read/SKILL.md +0 -45
- package/skills/doc-read/package.json +0 -29
- package/skills/doc-read/src/index.ts +0 -324
- package/skills/doc-read/tsconfig.json +0 -8
- package/skills/domainpurchase/LICENSE +0 -192
- package/skills/domainpurchase/SKILL.md +0 -29
- package/skills/domainpurchase/package.json +0 -30
- package/skills/domainpurchase/src/index.ts +0 -3
- package/skills/domainpurchase/tsconfig.json +0 -21
- package/skills/email-sequence/SKILL.md +0 -53
- package/skills/email-sequence/package.json +0 -10
- package/skills/experiment-power-calculator/CLAUDE.md +0 -19
- package/skills/experiment-power-calculator/package.json +0 -29
- package/skills/experiment-power-calculator/src/index.ts +0 -86
- package/skills/experiment-power-calculator/tsconfig.json +0 -10
- package/skills/extract-frames/CLAUDE.md +0 -19
- package/skills/extract-frames/package.json +0 -27
- package/skills/extract-frames/src/index.ts +0 -616
- package/skills/extract-frames/tsconfig.json +0 -10
- package/skills/file-organizer/CLAUDE.md +0 -19
- package/skills/file-organizer/package.json +0 -27
- package/skills/file-organizer/src/index.ts +0 -91
- package/skills/file-organizer/tsconfig.json +0 -10
- package/skills/folder-tree/CLAUDE.md +0 -19
- package/skills/folder-tree/package.json +0 -29
- package/skills/folder-tree/src/index.ts +0 -568
- package/skills/folder-tree/tsconfig.json +0 -10
- package/skills/form-filler/CLAUDE.md +0 -19
- package/skills/form-filler/package.json +0 -29
- package/skills/form-filler/src/index.ts +0 -81
- package/skills/form-filler/tsconfig.json +0 -10
- package/skills/generate-api-client/CLAUDE.md +0 -19
- package/skills/generate-api-client/package.json +0 -29
- package/skills/generate-api-client/src/generator.ts +0 -47
- package/skills/generate-api-client/src/index.ts +0 -92
- package/skills/generate-api-client/src/logger.ts +0 -34
- package/skills/generate-api-client/src/python-generator.ts +0 -245
- package/skills/generate-api-client/src/spec-loader.ts +0 -48
- package/skills/generate-api-client/src/type-mappers.ts +0 -79
- package/skills/generate-api-client/src/types.ts +0 -76
- package/skills/generate-api-client/src/typescript-generator.ts +0 -247
- package/skills/generate-api-client/tsconfig.json +0 -10
- package/skills/generate-chart/CLAUDE.md +0 -19
- package/skills/generate-chart/package.json +0 -27
- package/skills/generate-chart/src/index.ts +0 -510
- package/skills/generate-chart/tsconfig.json +0 -10
- package/skills/generate-dockerfile/CLAUDE.md +0 -19
- package/skills/generate-dockerfile/package.json +0 -27
- package/skills/generate-dockerfile/src/cli.ts +0 -78
- package/skills/generate-dockerfile/src/dockerfile-templates.ts +0 -392
- package/skills/generate-dockerfile/src/index.ts +0 -81
- package/skills/generate-dockerfile/src/logger.ts +0 -30
- package/skills/generate-dockerfile/src/project-detection.ts +0 -68
- package/skills/generate-dockerfile/src/support-files.ts +0 -171
- package/skills/generate-dockerfile/src/types.ts +0 -29
- package/skills/generate-dockerfile/tsconfig.json +0 -10
- package/skills/generate-env/CLAUDE.md +0 -19
- package/skills/generate-env/package.json +0 -29
- package/skills/generate-env/src/cli.ts +0 -85
- package/skills/generate-env/src/detection.ts +0 -161
- package/skills/generate-env/src/env-data.ts +0 -66
- package/skills/generate-env/src/generators.ts +0 -240
- package/skills/generate-env/src/index.ts +0 -120
- package/skills/generate-env/src/runtime.ts +0 -30
- package/skills/generate-env/src/types.ts +0 -32
- package/skills/generate-env/tsconfig.json +0 -10
- package/skills/generate-favicon/CLAUDE.md +0 -19
- package/skills/generate-favicon/package.json +0 -29
- package/skills/generate-favicon/src/index.ts +0 -421
- package/skills/generate-favicon/tsconfig.json +0 -10
- package/skills/generate-qrcode/CLAUDE.md +0 -19
- package/skills/generate-qrcode/package.json +0 -30
- package/skills/generate-qrcode/src/index.ts +0 -584
- package/skills/generate-qrcode/tsconfig.json +0 -10
- package/skills/generate-resume/CLAUDE.md +0 -19
- package/skills/generate-resume/package.json +0 -27
- package/skills/generate-resume/src/cli.ts +0 -157
- package/skills/generate-resume/src/index.ts +0 -178
- package/skills/generate-resume/src/parsers.ts +0 -95
- package/skills/generate-resume/src/renderers.ts +0 -538
- package/skills/generate-resume/src/security.ts +0 -39
- package/skills/generate-resume/src/types.ts +0 -86
- package/skills/generate-resume/tsconfig.json +0 -10
- package/skills/generate-sitemap/CLAUDE.md +0 -19
- package/skills/generate-sitemap/package.json +0 -27
- package/skills/generate-sitemap/src/index.ts +0 -626
- package/skills/generate-sitemap/tsconfig.json +0 -10
- package/skills/gif-maker/CLAUDE.md +0 -19
- package/skills/gif-maker/package.json +0 -30
- package/skills/gif-maker/src/index.ts +0 -600
- package/skills/gif-maker/tsconfig.json +0 -10
- package/skills/hook/LICENSE +0 -192
- package/skills/hook/README.md +0 -74
- package/skills/hook/SKILL.md +0 -85
- package/skills/hook/bunfig.toml +0 -5
- package/skills/hook/package.json +0 -28
- package/skills/hook/src/commands/create.ts +0 -112
- package/skills/hook/src/commands/events.ts +0 -37
- package/skills/hook/src/commands/validate.ts +0 -117
- package/skills/hook/src/index.ts +0 -118
- package/skills/hook/src/templates/root.ts +0 -196
- package/skills/hook/src/templates/source.ts +0 -647
- package/skills/hook/tsconfig.json +0 -18
- package/skills/http-server/CLAUDE.md +0 -19
- package/skills/http-server/package.json +0 -29
- package/skills/http-server/src/index.ts +0 -51
- package/skills/http-server/tsconfig.json +0 -10
- package/skills/implementation/LICENSE +0 -192
- package/skills/implementation/README.md +0 -53
- package/skills/implementation/SKILL.md +0 -57
- package/skills/implementation/bunfig.toml +0 -5
- package/skills/implementation/package.json +0 -28
- package/skills/implementation/src/commands/create.ts +0 -187
- package/skills/implementation/src/index.ts +0 -62
- package/skills/implementation/tsconfig.json +0 -18
- package/skills/implementation-plan/CLAUDE.md +0 -19
- package/skills/implementation-plan/package.json +0 -29
- package/skills/implementation-plan/src/index.ts +0 -520
- package/skills/implementation-plan/tsconfig.json +0 -10
- package/skills/implementation-todo/CLAUDE.md +0 -19
- package/skills/implementation-todo/package.json +0 -29
- package/skills/implementation-todo/src/index.ts +0 -429
- package/skills/implementation-todo/tsconfig.json +0 -10
- package/skills/invoice/.env.example +0 -3
- package/skills/invoice/CLAUDE.md +0 -31
- package/skills/invoice/LICENSE +0 -192
- package/skills/invoice/README.md +0 -70
- package/skills/invoice/package.json +0 -26
- package/skills/invoice/src/commands/companies.ts +0 -202
- package/skills/invoice/src/commands/config.ts +0 -132
- package/skills/invoice/src/commands/generate.ts +0 -177
- package/skills/invoice/src/commands/invoices.ts +0 -218
- package/skills/invoice/src/index.ts +0 -3
- package/skills/invoice/src/lib/api.ts +0 -124
- package/skills/invoice/src/lib/storage.ts +0 -171
- package/skills/invoice/src/types/index.ts +0 -86
- package/skills/invoice/src/utils/logger.ts +0 -33
- package/skills/invoice/src/utils/paths.ts +0 -25
- package/skills/invoice/tsconfig.json +0 -23
- package/skills/invoice-reconciliation/SKILL.md +0 -98
- package/skills/invoice-reconciliation/package.json +0 -36
- package/skills/invoice-reconciliation/src/index.ts +0 -743
- package/skills/invoice-reconciliation/tsconfig.json +0 -17
- package/skills/landing-page-pack/SKILL.md +0 -55
- package/skills/landing-page-pack/package.json +0 -10
- package/skills/latex-table-generator/CLAUDE.md +0 -19
- package/skills/latex-table-generator/package.json +0 -29
- package/skills/latex-table-generator/src/index.ts +0 -113
- package/skills/latex-table-generator/tsconfig.json +0 -10
- package/skills/logo-design/SKILL.md +0 -94
- package/skills/logo-design/package.json +0 -35
- package/skills/logo-design/src/cli.ts +0 -132
- package/skills/logo-design/src/constants.ts +0 -5
- package/skills/logo-design/src/docs.ts +0 -102
- package/skills/logo-design/src/geometry.ts +0 -324
- package/skills/logo-design/src/index.ts +0 -212
- package/skills/logo-design/src/palette.ts +0 -258
- package/skills/logo-design/src/types.ts +0 -50
- package/skills/logo-design/tsconfig.json +0 -17
- package/skills/lorem-generator/CLAUDE.md +0 -19
- package/skills/lorem-generator/package.json +0 -29
- package/skills/lorem-generator/src/index.ts +0 -59
- package/skills/lorem-generator/tsconfig.json +0 -10
- package/skills/managemcp/CLAUDE.md +0 -14
- package/skills/managemcp/README.md +0 -24
- package/skills/managemcp/package.json +0 -16
- package/skills/managemcp/src/index.ts +0 -3
- package/skills/managemcp/tsconfig.json +0 -27
- package/skills/markdown-validator/CLAUDE.md +0 -19
- package/skills/markdown-validator/package.json +0 -29
- package/skills/markdown-validator/src/index.ts +0 -92
- package/skills/markdown-validator/tsconfig.json +0 -10
- package/skills/market-research-report/SKILL.md +0 -51
- package/skills/market-research-report/package.json +0 -10
- package/skills/meeting-pack/SKILL.md +0 -52
- package/skills/meeting-pack/package.json +0 -10
- package/skills/merge-pdfs/CLAUDE.md +0 -19
- package/skills/merge-pdfs/package.json +0 -31
- package/skills/merge-pdfs/src/index.ts +0 -427
- package/skills/merge-pdfs/tsconfig.json +0 -10
- package/skills/migration-plan-pack/SKILL.md +0 -56
- package/skills/migration-plan-pack/package.json +0 -10
- package/skills/monitor/SKILL.md +0 -69
- package/skills/monitor/package.json +0 -33
- package/skills/monitor/src/index.ts +0 -34
- package/skills/monitor/tsconfig.json +0 -17
- package/skills/one-page-website/SKILL.md +0 -128
- package/skills/one-page-website/package.json +0 -34
- package/skills/one-page-website/src/design.ts +0 -336
- package/skills/one-page-website/src/docs.ts +0 -159
- package/skills/one-page-website/src/index.ts +0 -357
- package/skills/one-page-website/src/page.ts +0 -340
- package/skills/one-page-website/src/styles.ts +0 -508
- package/skills/one-page-website/src/types.ts +0 -78
- package/skills/one-page-website/tsconfig.json +0 -17
- package/skills/pdf-generate/CLAUDE.md +0 -19
- package/skills/pdf-generate/SKILL.md +0 -86
- package/skills/pdf-generate/package.json +0 -21
- package/skills/pdf-generate/src/cli.ts +0 -162
- package/skills/pdf-generate/src/html.ts +0 -84
- package/skills/pdf-generate/src/index.ts +0 -62
- package/skills/pdf-generate/src/markdown.ts +0 -27
- package/skills/pdf-generate/src/pdf-writer.ts +0 -78
- package/skills/pdf-generate/src/runtime.ts +0 -34
- package/skills/pdf-generate/src/security.ts +0 -37
- package/skills/pdf-generate/src/templates.ts +0 -311
- package/skills/pdf-generate/src/types.ts +0 -28
- package/skills/pdf-generate/tsconfig.json +0 -16
- package/skills/pdf-to-dataset/SKILL.md +0 -88
- package/skills/pdf-to-dataset/package.json +0 -37
- package/skills/pdf-to-dataset/src/index.ts +0 -790
- package/skills/pdf-to-dataset/tsconfig.json +0 -17
- package/skills/pdf-to-markdown/SKILL.md +0 -81
- package/skills/pdf-to-markdown/package.json +0 -35
- package/skills/pdf-to-markdown/src/index.ts +0 -694
- package/skills/pdf-to-markdown/tsconfig.json +0 -17
- package/skills/performance-audit-report/SKILL.md +0 -49
- package/skills/performance-audit-report/package.json +0 -10
- package/skills/pitch-deck/SKILL.md +0 -51
- package/skills/pitch-deck/package.json +0 -10
- package/skills/product-mockup/SKILL.md +0 -107
- package/skills/product-mockup/package.json +0 -32
- package/skills/product-mockup/src/cli.ts +0 -150
- package/skills/product-mockup/src/design.ts +0 -151
- package/skills/product-mockup/src/docs.ts +0 -134
- package/skills/product-mockup/src/index.ts +0 -182
- package/skills/product-mockup/src/render.ts +0 -407
- package/skills/product-mockup/src/types.ts +0 -66
- package/skills/product-mockup/tsconfig.json +0 -17
- package/skills/proposal-pack/SKILL.md +0 -53
- package/skills/proposal-pack/package.json +0 -10
- package/skills/read-csv/SKILL.md +0 -62
- package/skills/read-csv/package.json +0 -37
- package/skills/read-csv/src/index.ts +0 -356
- package/skills/read-csv/tsconfig.json +0 -17
- package/skills/read-excel/SKILL.md +0 -64
- package/skills/read-excel/package.json +0 -36
- package/skills/read-excel/src/index.ts +0 -266
- package/skills/read-excel/tsconfig.json +0 -17
- package/skills/regex-tester/CLAUDE.md +0 -19
- package/skills/regex-tester/package.json +0 -27
- package/skills/regex-tester/src/index.ts +0 -183
- package/skills/regex-tester/tsconfig.json +0 -10
- package/skills/repo-onboarding-report/SKILL.md +0 -52
- package/skills/repo-onboarding-report/package.json +0 -10
- package/skills/scancommitpr/SKILL.md +0 -178
- package/skills/scancommitpr/package.json +0 -34
- package/skills/scancommitpr/src/index.ts +0 -44
- package/skills/scancommitpr/tsconfig.json +0 -13
- package/skills/scancommitpush/SKILL.md +0 -174
- package/skills/scancommitpush/package.json +0 -32
- package/skills/scancommitpush/src/index.ts +0 -44
- package/skills/scancommitpush/tsconfig.json +0 -13
- package/skills/scientific-figure-check/CLAUDE.md +0 -19
- package/skills/scientific-figure-check/package.json +0 -29
- package/skills/scientific-figure-check/src/index.ts +0 -83
- package/skills/scientific-figure-check/tsconfig.json +0 -10
- package/skills/security-audit/CLAUDE.md +0 -19
- package/skills/security-audit/package.json +0 -27
- package/skills/security-audit/src/index.ts +0 -145
- package/skills/security-audit/tsconfig.json +0 -10
- package/skills/security-audit-report/SKILL.md +0 -52
- package/skills/security-audit-report/package.json +0 -10
- package/skills/seo-content-pack/SKILL.md +0 -54
- package/skills/seo-content-pack/package.json +0 -10
- package/skills/siteanalyze/SKILL.md +0 -25
- package/skills/siteanalyze/package.json +0 -27
- package/skills/siteanalyze/src/index.ts +0 -592
- package/skills/slide-deck-generator/SKILL.md +0 -93
- package/skills/slide-deck-generator/package.json +0 -38
- package/skills/slide-deck-generator/src/cli.ts +0 -133
- package/skills/slide-deck-generator/src/index.ts +0 -148
- package/skills/slide-deck-generator/src/model.ts +0 -307
- package/skills/slide-deck-generator/src/pptx.ts +0 -143
- package/skills/slide-deck-generator/src/render.ts +0 -248
- package/skills/slide-deck-generator/src/types.ts +0 -114
- package/skills/slide-deck-generator/src/utils.ts +0 -53
- package/skills/slide-deck-generator/tsconfig.json +0 -17
- package/skills/social-content-calendar/SKILL.md +0 -54
- package/skills/social-content-calendar/package.json +0 -10
- package/skills/split-pdf/CLAUDE.md +0 -19
- package/skills/split-pdf/package.json +0 -30
- package/skills/split-pdf/src/index.ts +0 -301
- package/skills/split-pdf/tsconfig.json +0 -10
- package/skills/statistical-test-selector/CLAUDE.md +0 -19
- package/skills/statistical-test-selector/package.json +0 -27
- package/skills/statistical-test-selector/src/index.ts +0 -75
- package/skills/statistical-test-selector/tsconfig.json +0 -10
- package/skills/test-suite-generator/SKILL.md +0 -51
- package/skills/test-suite-generator/package.json +0 -10
- package/skills/tmux-session/SKILL.md +0 -109
- package/skills/tmux-session/package.json +0 -33
- package/skills/tmux-session/src/index.ts +0 -34
- package/skills/tmux-session/tsconfig.json +0 -17
- package/skills/todos-plan/SKILL.md +0 -363
- package/skills/todos-plan/agents/openai.yaml +0 -4
- package/skills/todos-plan/package.json +0 -9
- package/skills/todos-plan/src/index.ts +0 -68
- package/skills/tsconfig.base.json +0 -12
- package/skills/validate-config/CLAUDE.md +0 -19
- package/skills/validate-config/package.json +0 -29
- package/skills/validate-config/src/index.ts +0 -56
- package/skills/validate-config/tsconfig.json +0 -10
- package/skills/video-downloader/CLAUDE.md +0 -19
- package/skills/video-downloader/package.json +0 -29
- package/skills/video-downloader/src/index.ts +0 -561
- package/skills/video-downloader/tsconfig.json +0 -10
- package/skills/video-highlight-pack/SKILL.md +0 -54
- package/skills/video-highlight-pack/package.json +0 -10
- package/skills/watermark/CLAUDE.md +0 -19
- package/skills/watermark/package.json +0 -32
- package/skills/watermark/src/index.ts +0 -587
- package/skills/watermark/tsconfig.json +0 -10
package/dist/lib/agent-sync.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `skills sync` — the last mile: write skills from this machine's corpus
|
|
3
|
-
* (~/.hasna/skills/
|
|
4
|
-
*
|
|
3
|
+
* (the migrated owner-layout cache ~/.hasna/skills/skills/<name>/, or the
|
|
4
|
+
* legacy ~/.hasna/skills/installed/<name>/ when not migrated) into each coding
|
|
5
|
+
* agent's global skills directory, per-tool adapted, so an agent auto-loads
|
|
6
|
+
* them.
|
|
5
7
|
*
|
|
6
8
|
* This is the deliberate reversal of the old "pins, not installs" stub: agent skill
|
|
7
9
|
* folders used to be left entirely unmanaged and every write path returned success:false.
|
|
@@ -18,6 +20,14 @@ import { renameSync } from "node:fs";
|
|
|
18
20
|
*/
|
|
19
21
|
export type SyncAgent = "claude" | "codewith" | "codex" | "opencode" | "cursor";
|
|
20
22
|
export declare const SYNC_AGENTS: readonly SyncAgent[];
|
|
23
|
+
/**
|
|
24
|
+
* Environment variable naming an explicit canonical-corpus source for sync. The CLI
|
|
25
|
+
* `--source <path>` flag takes precedence; this is the ambient form, and it means the
|
|
26
|
+
* same thing: the npm package ships no corpus, so a machine that has not pulled from an
|
|
27
|
+
* instance (or that is not a checkout of the monorepo) must point sync at where the
|
|
28
|
+
* corpus actually is.
|
|
29
|
+
*/
|
|
30
|
+
export declare const SKILLS_SOURCE_ENV = "SKILLS_SOURCE";
|
|
21
31
|
/**
|
|
22
32
|
* Ownership marker written beside every SKILL.md this tool syncs. Its presence is how a
|
|
23
33
|
* re-sync tells "a skill I wrote, safe to update" from "a skill the user hand-authored,
|
|
@@ -69,18 +79,43 @@ export interface SyncSkillsOptions {
|
|
|
69
79
|
force?: boolean;
|
|
70
80
|
/** Corpus root override. Tests only. */
|
|
71
81
|
rootDir?: string;
|
|
82
|
+
/**
|
|
83
|
+
* Explicit canonical-corpus source: a directory of skill folders, or the monorepo
|
|
84
|
+
* package root (which contains `skills/` and `agent-skills/`). Takes precedence over
|
|
85
|
+
* $SKILLS_SOURCE, which takes precedence over the installed corpus cache.
|
|
86
|
+
*/
|
|
87
|
+
sourceDir?: string;
|
|
72
88
|
/** Home directory override for agent skill dirs. Tests only. */
|
|
73
89
|
homeDir?: string;
|
|
74
90
|
}
|
|
75
91
|
export interface SyncSkillsResult {
|
|
76
92
|
actions: AgentSyncAction[];
|
|
77
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Resolve where sync reads the canonical corpus from.
|
|
96
|
+
*
|
|
97
|
+
* The package ships no bundled corpus. Precedence is explicit-over-ambient:
|
|
98
|
+
* 1. `options.sourceDir` - an explicit source: a corpus dir, or a package root
|
|
99
|
+
* containing `skills/` and/or `agent-skills/`
|
|
100
|
+
* 2. `$SKILLS_SOURCE` - the ambient spelling of the same thing
|
|
101
|
+
* 3. the installed cache - `getPortableSkillsRoot()` (what `skills pull` writes),
|
|
102
|
+
* resolved through `resolveCorpusRoot` so a migrated owner layout
|
|
103
|
+
* (~/.hasna/skills/skills/) is read in preference to `installed/`.
|
|
104
|
+
*
|
|
105
|
+
* A missing explicit source is an error, not a fallback to "nothing": the whole point
|
|
106
|
+
* of zero-corpus is that sync must not silently sync an empty corpus because the
|
|
107
|
+
* package directory changed shape.
|
|
108
|
+
*/
|
|
109
|
+
export declare function resolveSyncCorpus(options?: SyncSkillsOptions): {
|
|
110
|
+
roots: string[];
|
|
111
|
+
source: "source" | "corpus";
|
|
112
|
+
};
|
|
78
113
|
export declare function syncSkillsToAgents(options?: SyncSkillsOptions): SyncSkillsResult;
|
|
79
114
|
export interface WriteManagedAgentSkillParams {
|
|
80
115
|
skill: string;
|
|
81
116
|
agent: SyncAgent;
|
|
82
117
|
skillMd: string;
|
|
83
|
-
source?: "
|
|
118
|
+
source?: "source" | "corpus";
|
|
84
119
|
resourceDir?: string;
|
|
85
120
|
homeDir?: string;
|
|
86
121
|
dryRun?: boolean;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { type SyncAgent, type SyncMarker } from "./agent-sync.js";
|
|
2
|
+
import type { PortableSkillOptions } from "./portable-skills.js";
|
|
3
|
+
export declare const CONFLICTS_LEDGER_FILE = "conflicts.json";
|
|
4
|
+
export declare const ROLLBACK_DIRNAME = "rollback";
|
|
5
|
+
export interface HomeSkillEntry {
|
|
6
|
+
agent: SyncAgent;
|
|
7
|
+
skill: string;
|
|
8
|
+
/** The agent home skills directory (e.g. ~/.claude/skills). */
|
|
9
|
+
home: string;
|
|
10
|
+
/** The skill's own directory under the agent home. */
|
|
11
|
+
path: string;
|
|
12
|
+
hash: string;
|
|
13
|
+
/** SKILL.md mtime (ISO). */
|
|
14
|
+
mtime: string;
|
|
15
|
+
}
|
|
16
|
+
export interface HomeConflict extends HomeSkillEntry {
|
|
17
|
+
canonicalHash: string;
|
|
18
|
+
}
|
|
19
|
+
export interface UnknownHomeSkill extends HomeSkillEntry {
|
|
20
|
+
}
|
|
21
|
+
export interface AdoptionScan {
|
|
22
|
+
/** Unmarked home dirs whose SKILL.md hash matches the canonical corpus entry. */
|
|
23
|
+
adoptable: HomeSkillEntry[];
|
|
24
|
+
/** Unmarked home dirs whose content differs from canonical; never touched. */
|
|
25
|
+
conflicts: HomeConflict[];
|
|
26
|
+
/** Unmarked home dirs with no canonical corpus entry; reported and skipped. */
|
|
27
|
+
unknown: UnknownHomeSkill[];
|
|
28
|
+
/** Already-marked dirs, counted only. */
|
|
29
|
+
managed: number;
|
|
30
|
+
}
|
|
31
|
+
export interface AdoptionOptions extends PortableSkillOptions {
|
|
32
|
+
agents?: SyncAgent[];
|
|
33
|
+
/** Write markers and the conflicts ledger. Without it, scan only. */
|
|
34
|
+
apply?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface AdoptionResult extends AdoptionScan {
|
|
37
|
+
applied: boolean;
|
|
38
|
+
/** Rollback record path, when markers were written. */
|
|
39
|
+
rollbackFile?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface RollbackMarker {
|
|
42
|
+
agent: SyncAgent;
|
|
43
|
+
skill: string;
|
|
44
|
+
path: string;
|
|
45
|
+
hash: string;
|
|
46
|
+
marker: SyncMarker;
|
|
47
|
+
}
|
|
48
|
+
export interface RollbackRecord {
|
|
49
|
+
version: 1;
|
|
50
|
+
mode: "adopt" | "prune";
|
|
51
|
+
timestamp: string;
|
|
52
|
+
entries: RollbackMarker[];
|
|
53
|
+
}
|
|
54
|
+
export interface PruneCandidate extends RollbackMarker {
|
|
55
|
+
/** The agent home skills directory. */
|
|
56
|
+
home: string;
|
|
57
|
+
}
|
|
58
|
+
export interface PruneResult {
|
|
59
|
+
candidates: PruneCandidate[];
|
|
60
|
+
pruned: number;
|
|
61
|
+
dryRun: boolean;
|
|
62
|
+
rollbackFile?: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Canonical corpus index: skill name -> canonical SKILL.md hash. A skill is
|
|
66
|
+
* canonical when the corpus cache holds a directory with a SKILL.md.
|
|
67
|
+
*/
|
|
68
|
+
export declare function indexCanonicalCorpus(corpusRoot: string): Map<string, string>;
|
|
69
|
+
/**
|
|
70
|
+
* Census of unmarked home skill dirs against the canonical corpus. Read-only.
|
|
71
|
+
*/
|
|
72
|
+
export declare function scanUnmarkedHomes(options?: AdoptionOptions): AdoptionScan;
|
|
73
|
+
/**
|
|
74
|
+
* Write one rollback record listing every marker written (mode "adopt") or
|
|
75
|
+
* every directory removed (mode "prune"), so both operations are reversible
|
|
76
|
+
* from a single machine-readable file.
|
|
77
|
+
*/
|
|
78
|
+
export declare function writeRollbackRecord(mode: "adopt" | "prune", entries: RollbackMarker[], appDir?: string): string;
|
|
79
|
+
/**
|
|
80
|
+
* Adopt unmarked home skills whose content exactly matches the canonical
|
|
81
|
+
* corpus. Without `apply` this is a pure scan; with `apply` it writes one
|
|
82
|
+
* marker per exact match, appends diverging dirs to the conflicts ledger, and
|
|
83
|
+
* records every written marker in a rollback file. Never deletes anything.
|
|
84
|
+
*/
|
|
85
|
+
export declare function adoptUnmarkedHomes(options?: AdoptionOptions): AdoptionResult;
|
|
86
|
+
/**
|
|
87
|
+
* List (or, with `apply`, remove) marked home skill dirs that have no canonical
|
|
88
|
+
* corpus entry. Never touches an unmarked directory. Removals are recorded in
|
|
89
|
+
* the rollback store before they happen.
|
|
90
|
+
*/
|
|
91
|
+
export declare function pruneStrayHomes(options?: AdoptionOptions): PruneResult;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type SyncAgent } from "./agent-sync.js";
|
|
2
|
+
import { type AdoptionOptions } from "./home-adoption.js";
|
|
3
|
+
export type DriftKind = "missing-from-home" | "stray-in-home" | "diverged";
|
|
4
|
+
export interface DriftEntry {
|
|
5
|
+
agent: SyncAgent;
|
|
6
|
+
skill: string;
|
|
7
|
+
kind: DriftKind;
|
|
8
|
+
path: string;
|
|
9
|
+
homeHash?: string;
|
|
10
|
+
canonicalHash?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface DriftCensus {
|
|
13
|
+
entries: DriftEntry[];
|
|
14
|
+
/** Homes that exist and were checked. */
|
|
15
|
+
homesChecked: number;
|
|
16
|
+
/** Unmarked home skill dirs (adoption candidates, not drift). */
|
|
17
|
+
unmarked: number;
|
|
18
|
+
/** Marked home skill dirs. */
|
|
19
|
+
managed: number;
|
|
20
|
+
clean: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare function censusHomeDrift(options?: AdoptionOptions): DriftCensus;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { type PortableSkillOptions } from "./portable-skills.js";
|
|
2
|
+
/** The canonical corpus cache subfolder of the app folder. */
|
|
3
|
+
export declare const SKILLS_CACHE_DIRNAME = "skills";
|
|
4
|
+
export declare const LOGS_DIRNAME = "logs";
|
|
5
|
+
export declare const OUTPUTS_DIRNAME = "outputs";
|
|
6
|
+
/** Marker file inside skills/ proving a migration ran; also its record. */
|
|
7
|
+
export declare const LAYOUT_MIGRATION_RECORD = ".layout-migration.json";
|
|
8
|
+
export declare const LEGACY_CUSTOM_DIRNAME = "custom";
|
|
9
|
+
export interface LayoutMigrationRecord {
|
|
10
|
+
version: 1;
|
|
11
|
+
/** ISO timestamp of the migration. */
|
|
12
|
+
migratedAt: string;
|
|
13
|
+
/** The entries moved: "installed" for the old corpus dir, then each legacy flat dir name. */
|
|
14
|
+
moved: string[];
|
|
15
|
+
note: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function layoutMigrationRecordPath(appDir: string): string;
|
|
18
|
+
/** True once the owner layout has been migrated (the record is the authority). */
|
|
19
|
+
export declare function isOwnerLayoutMigrated(appDir: string): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Resolve the corpus the sync/fan-out reads from.
|
|
22
|
+
*
|
|
23
|
+
* Precedence:
|
|
24
|
+
* 1. options.rootDir — named outright, no suffix (unchanged contract)
|
|
25
|
+
* 2. migrated owner layout — <app folder>/skills when a migration record exists
|
|
26
|
+
* 3. the pre-migration corpus — getPortableSkillsRoot() (installed/, with the
|
|
27
|
+
* legacy auto-copy migration)
|
|
28
|
+
*
|
|
29
|
+
* The migration record is required: a skills/ directory someone created by hand
|
|
30
|
+
* is not the corpus and never will be treated as one.
|
|
31
|
+
*/
|
|
32
|
+
export declare function resolveCorpusRoot(options?: PortableSkillOptions): string;
|
|
33
|
+
export type LayoutMigrationStatus = "already-migrated" | "refused" | "migrated" | "nothing-to-do";
|
|
34
|
+
export interface LayoutMigrationResult {
|
|
35
|
+
status: LayoutMigrationStatus;
|
|
36
|
+
/** Why a run refused; absent otherwise. */
|
|
37
|
+
reason?: string;
|
|
38
|
+
/** The source entries moved (or that a dry-run would move). */
|
|
39
|
+
moved: string[];
|
|
40
|
+
/** Directories created by the run. */
|
|
41
|
+
created: string[];
|
|
42
|
+
/** The record written, when a run actually migrated. */
|
|
43
|
+
record?: LayoutMigrationRecord;
|
|
44
|
+
}
|
|
45
|
+
export interface LayoutMigrationOptions {
|
|
46
|
+
dryRun?: boolean;
|
|
47
|
+
/** App-folder override for tests. */
|
|
48
|
+
homeDir?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Migrate the owner layout, idempotently.
|
|
52
|
+
*
|
|
53
|
+
* - already-migrated: the record exists; nothing happens.
|
|
54
|
+
* - refused: skills/ exists with content and no record, or a legacy dir would
|
|
55
|
+
* collide with an existing skills/<name>; nothing happens.
|
|
56
|
+
* - migrated: installed/ (when present) and every legacy flat dir moved into
|
|
57
|
+
* skills/; logs/ and outputs/ created; the record written.
|
|
58
|
+
* - nothing-to-do: no installed/ and no legacy dirs; logs/ and outputs/ are
|
|
59
|
+
* still created (lazily) unless the run is a dry-run.
|
|
60
|
+
*/
|
|
61
|
+
export declare function migrateOwnerLayout(options?: LayoutMigrationOptions): LayoutMigrationResult;
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import type { SkillKind } from "./registry-types.js";
|
|
2
|
-
import { type PortableSkillManifest } from "./portable-skills-types.js";
|
|
2
|
+
import { type PortableSkillManifest, type PortableSkillProvenance, type PortableSkillRuntimeContract } from "./portable-skills-types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Default runtime contract (hasna.skill.v1). `bun` is the Hasna default
|
|
5
|
+
* runtime; the sandbox is read-only by default, execution is time-capped at
|
|
6
|
+
* 900s and does not assume network egress.
|
|
7
|
+
*/
|
|
8
|
+
export declare function defaultRuntimeContract(entrypoint?: string): PortableSkillRuntimeContract;
|
|
9
|
+
/** Provenance defaults; content_hash is filled at write time over the bundle. */
|
|
10
|
+
export declare function defaultProvenance(sourceCommit?: string): PortableSkillProvenance;
|
|
3
11
|
export declare function normalizePortableSkillName(name: string): string;
|
|
4
12
|
export declare function readPortableSkillManifest(skillPath: string, fallbackName?: string): PortableSkillManifest;
|
|
5
13
|
export declare function parseSkillKind(value: string | undefined): SkillKind | undefined;
|
|
@@ -11,6 +19,16 @@ export declare function createPortableManifest(name: string, options: {
|
|
|
11
19
|
description: string;
|
|
12
20
|
}): PortableSkillManifest;
|
|
13
21
|
export declare function writePortableSkillTemplate(skillPath: string, manifest: PortableSkillManifest): void;
|
|
22
|
+
/**
|
|
23
|
+
* Write skill.json with the canonical content_hash computed over the current
|
|
24
|
+
* bundle. Preserves unknown keys already present in an existing skill.json
|
|
25
|
+
* (merge, never replace) and recomputes the hash whenever content changed.
|
|
26
|
+
*
|
|
27
|
+
* The manifest is written hashless FIRST so the canonical bundle covers
|
|
28
|
+
* skill.json itself; canonicalization strips content_hash, so adding the hash
|
|
29
|
+
* afterwards does not change the digest.
|
|
30
|
+
*/
|
|
31
|
+
export declare function writeSkillJsonWithHash(skillPath: string, manifest: PortableSkillManifest): PortableSkillManifest;
|
|
14
32
|
export declare function ensurePortableSkillFiles(skillPath: string, manifest: PortableSkillManifest): PortableSkillManifest;
|
|
15
33
|
/**
|
|
16
34
|
* Instruction (prose) skills are consumed by agent renderers/MCP docs, not run
|
|
@@ -21,5 +39,7 @@ export declare function ensurePortableSkillFiles(skillPath: string, manifest: Po
|
|
|
21
39
|
export declare function ensureInstructionSkillFiles(skillPath: string, manifest: PortableSkillManifest): PortableSkillManifest;
|
|
22
40
|
export declare function copySkillDirectory(source: string, destination: string): void;
|
|
23
41
|
export declare function renderSkillJson(manifest: PortableSkillManifest): string;
|
|
42
|
+
/** The skill.json object for a manifest, with contract defaults applied. */
|
|
43
|
+
export declare function renderSkillJsonObject(manifest: PortableSkillManifest): Record<string, unknown>;
|
|
24
44
|
export declare function hasPackageDependencies(pkgPath: string): boolean;
|
|
25
45
|
export declare function displayName(name: string): string;
|
|
@@ -2,6 +2,50 @@ import type { SkillKind } from "./registry-types.js";
|
|
|
2
2
|
export declare const PORTABLE_SKILL_STANDARD = "hasna.skill.v1";
|
|
3
3
|
export declare const PORTABLE_SKILL_SCHEMA = "https://hasna.dev/schemas/skill.v1.json";
|
|
4
4
|
export declare const PORTABLE_SKILL_DEFAULT_VERSION = "0.1.0";
|
|
5
|
+
/** Allowed execution runtimes in the hasna.skill.v1 runtime contract. */
|
|
6
|
+
export declare const SKILL_RUNTIMES: readonly ["bun", "node", "python3"];
|
|
7
|
+
export type SkillRuntimeName = (typeof SKILL_RUNTIMES)[number];
|
|
8
|
+
/** Allowed sandbox modes in the hasna.skill.v1 runtime contract. */
|
|
9
|
+
export declare const SKILL_SANDBOX_MODES: readonly ["readonly-fs", "workspace-write", "full"];
|
|
10
|
+
export type SkillSandboxMode = (typeof SKILL_SANDBOX_MODES)[number];
|
|
11
|
+
/**
|
|
12
|
+
* Allowlisted system binaries a skill may declare. The allowlist lives here
|
|
13
|
+
* and in schemas/skill.schema.json; the parity test keeps them in agreement.
|
|
14
|
+
*/
|
|
15
|
+
export declare const SKILL_SYSTEM_DEPS_ALLOWLIST: readonly ["ffmpeg", "ffprobe", "imagemagick", "convert", "curl", "wget", "git", "gh", "jq", "python3", "pip3", "node", "bun", "npm", "rsync", "pdftotext", "tesseract", "7z", "unzip", "zip"];
|
|
16
|
+
export type SkillSystemDep = (typeof SKILL_SYSTEM_DEPS_ALLOWLIST)[number];
|
|
17
|
+
/**
|
|
18
|
+
* Runtime contract (hasna.skill.v1): how the skill executes and what it may
|
|
19
|
+
* touch. `env` carries secret REFERENCE names, never values.
|
|
20
|
+
*/
|
|
21
|
+
export interface PortableSkillRuntimeContract {
|
|
22
|
+
runtime: SkillRuntimeName;
|
|
23
|
+
/** Optional runtime version constraint, e.g. "22" or ">=3.12". */
|
|
24
|
+
version?: string;
|
|
25
|
+
/** Relative entrypoint; defaults to commands[0].entry. */
|
|
26
|
+
entrypoint?: string;
|
|
27
|
+
/** Max execution seconds, 1..900, default 900. */
|
|
28
|
+
timeout?: number;
|
|
29
|
+
/** Whether execution requires network egress, default false. */
|
|
30
|
+
needs_network?: boolean;
|
|
31
|
+
/** Secret reference names (uppercase identifiers), never values. */
|
|
32
|
+
env?: string[];
|
|
33
|
+
/** Filesystem access granted to execution, default readonly-fs. */
|
|
34
|
+
sandbox?: SkillSandboxMode;
|
|
35
|
+
/** Allowlisted system binaries required at execution time. */
|
|
36
|
+
system_deps?: SkillSystemDep[];
|
|
37
|
+
/** Glob patterns of artifacts the skill may produce. */
|
|
38
|
+
artifacts?: string[];
|
|
39
|
+
}
|
|
40
|
+
/** Provenance and integrity fields. content_hash is self-referencing. */
|
|
41
|
+
export interface PortableSkillProvenance {
|
|
42
|
+
/** Git SHA of the source revision, or "unknown" for local scaffolds. */
|
|
43
|
+
source_commit?: string;
|
|
44
|
+
/** Canonical SHA-256 of the normalized bundle (see skill-hash.ts). */
|
|
45
|
+
content_hash?: string;
|
|
46
|
+
/** Pointer to changelog / release notes (relative path or URL). */
|
|
47
|
+
changelog?: string;
|
|
48
|
+
}
|
|
5
49
|
/**
|
|
6
50
|
* Artifact class of a portable skill.
|
|
7
51
|
* - `executable`: a runnable skill folder (package.json + bin + src entry).
|
|
@@ -35,6 +79,8 @@ export interface PortableSkillManifest {
|
|
|
35
79
|
kind?: SkillKind;
|
|
36
80
|
inputs: PortableSkillInput[];
|
|
37
81
|
commands: PortableSkillCommand[];
|
|
82
|
+
runtime?: PortableSkillRuntimeContract;
|
|
83
|
+
provenance?: PortableSkillProvenance;
|
|
38
84
|
}
|
|
39
85
|
export interface PortableSkillSummary {
|
|
40
86
|
name: string;
|
package/dist/lib/pull.d.ts
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { type PortableSkillOptions } from "./portable-skills.js";
|
|
2
|
+
import { type SkillBundleEntry } from "./skill-bundle.js";
|
|
2
3
|
import type { SkillKind } from "./registry-types.js";
|
|
4
|
+
/** Header carrying the canonical content digest of the served bundle. */
|
|
5
|
+
export declare const BUNDLE_DIGEST_HEADER = "X-Skill-Bundle-Sha256";
|
|
6
|
+
/** Header carrying the HMAC signature of the served bundle, when the server can sign. */
|
|
7
|
+
export declare const BUNDLE_SIGNATURE_HEADER = "X-Skill-Bundle-Signature";
|
|
8
|
+
/** Marker file written inside each corpus skill directory recording pull provenance. */
|
|
9
|
+
export declare const PULL_MARKER_FILE = ".hasna-skills.json";
|
|
3
10
|
/**
|
|
4
11
|
* The slice of RemoteSkillsClient that `pullSkills` needs. Narrowed to an interface so a
|
|
5
12
|
* test can inject a fake and the real HTTP client (which satisfies it structurally) is
|
|
@@ -9,6 +16,12 @@ export interface SkillPullClient {
|
|
|
9
16
|
listSkills(): Promise<unknown[]>;
|
|
10
17
|
getSkill(slug: string): Promise<unknown>;
|
|
11
18
|
getSkillMd(slug: string): Promise<string | null>;
|
|
19
|
+
/**
|
|
20
|
+
* The skill's bundle, headers intact, or null when the instance serves none.
|
|
21
|
+
* `Response` is the natural transport type here: verification reads the
|
|
22
|
+
* X-Skill-Bundle-Sha256 / X-Skill-Bundle-Signature headers off it.
|
|
23
|
+
*/
|
|
24
|
+
getBundle(slug: string): Promise<Response | null>;
|
|
12
25
|
}
|
|
13
26
|
export interface PullSkillsOptions extends PortableSkillOptions {
|
|
14
27
|
/** Explicit skill names to pull. Ignored when `all` is set. */
|
|
@@ -20,6 +33,8 @@ export interface PullSkillsOptions extends PortableSkillOptions {
|
|
|
20
33
|
* `null` models "no credential available" so the null-handling path stays testable.
|
|
21
34
|
*/
|
|
22
35
|
client?: SkillPullClient | null;
|
|
36
|
+
/** HMAC signing key for bundle signature verification. Defaults to $SKILLS_SIGNING_KEY. */
|
|
37
|
+
signingKey?: string;
|
|
23
38
|
}
|
|
24
39
|
export interface PulledSkillResult {
|
|
25
40
|
name: string;
|
|
@@ -27,6 +42,10 @@ export interface PulledSkillResult {
|
|
|
27
42
|
path?: string;
|
|
28
43
|
kind?: SkillKind;
|
|
29
44
|
version?: string;
|
|
45
|
+
/** Canonical content hash of the installed bundle, when one was verified. */
|
|
46
|
+
contentHash?: string;
|
|
47
|
+
/** Source commit recorded on the bundle, when the instance reported one. */
|
|
48
|
+
sourceCommit?: string;
|
|
30
49
|
/** True when the pull created the corpus entry, false when it updated an existing one. */
|
|
31
50
|
created?: boolean;
|
|
32
51
|
error?: string;
|
|
@@ -38,4 +57,51 @@ export declare class PullSkillError extends Error {
|
|
|
38
57
|
readonly detail?: string[] | undefined;
|
|
39
58
|
constructor(message: string, detail?: string[] | undefined);
|
|
40
59
|
}
|
|
60
|
+
export interface VerifiedBundle {
|
|
61
|
+
/** The received bundle bytes, owned by this process. */
|
|
62
|
+
bytes: Uint8Array;
|
|
63
|
+
/** Canonical sha256 of `bytes`. */
|
|
64
|
+
contentHash: string;
|
|
65
|
+
/** The server-declared digest, when the header was present. */
|
|
66
|
+
serverHash?: string;
|
|
67
|
+
/** The server-declared signature, when the header was present. */
|
|
68
|
+
signature?: string;
|
|
69
|
+
}
|
|
41
70
|
export declare function pullSkills(options?: PullSkillsOptions): Promise<PullSkillsResult>;
|
|
71
|
+
/**
|
|
72
|
+
* The verification core, synchronous over already-buffered bytes: the digest header
|
|
73
|
+
* (when present) must equal the canonical sha256 of the received bytes, and the
|
|
74
|
+
* signature header (when present) must verify against the signing key when one is
|
|
75
|
+
* available — otherwise it is recorded with a warning, because a pull cannot check a
|
|
76
|
+
* signature it has no key for.
|
|
77
|
+
*/
|
|
78
|
+
export declare function verifyBundleResponseBytes(buffer: ArrayBuffer, response: Response, verify?: {
|
|
79
|
+
signingKey?: string;
|
|
80
|
+
}): VerifiedBundle;
|
|
81
|
+
/**
|
|
82
|
+
* Atomically replace the corpus entry for a verified bundle: stage every entry in a
|
|
83
|
+
* sibling directory, then rename into place (the existing entry is moved aside first
|
|
84
|
+
* and removed only after the staged tree is in position). A failure at any point leaves
|
|
85
|
+
* either the old entry or nothing — never a partial skill.
|
|
86
|
+
*/
|
|
87
|
+
export declare function installBundleAtomically(name: string, entries: SkillBundleEntry[], options?: PortableSkillOptions, marker?: {
|
|
88
|
+
version?: string;
|
|
89
|
+
contentHash?: string;
|
|
90
|
+
sourceCommit?: string;
|
|
91
|
+
signature?: string;
|
|
92
|
+
}): {
|
|
93
|
+
path: string;
|
|
94
|
+
created: boolean;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Record what a pull installed. Version/hash/source-commit are the provenance a later
|
|
98
|
+
* `skills sync --check` or drift census needs; the signature is recorded when one was
|
|
99
|
+
* present so an audit can tell "verified" from "declared".
|
|
100
|
+
*/
|
|
101
|
+
export declare function writePullMarker(dir: string, record: {
|
|
102
|
+
skill: string;
|
|
103
|
+
version?: string;
|
|
104
|
+
contentHash?: string;
|
|
105
|
+
sourceCommit?: string;
|
|
106
|
+
signature?: string;
|
|
107
|
+
}): void;
|
|
@@ -28,5 +28,11 @@ export declare class RemoteSkillsClient {
|
|
|
28
28
|
publishSkill(manifest: Record<string, unknown>, bundle?: Uint8Array): Promise<Response>;
|
|
29
29
|
deleteSkill(slug: string): Promise<Response>;
|
|
30
30
|
downloadSkillBundle(slug: string): Promise<Response>;
|
|
31
|
+
/**
|
|
32
|
+
* Bundle fetch for the verified-pull path. Returns the raw Response so the caller can
|
|
33
|
+
* read the X-Skill-Bundle-Sha256 / X-Skill-Bundle-Signature headers, or null when the
|
|
34
|
+
* instance serves no bundle for this skill (the metadata-only fallback path).
|
|
35
|
+
*/
|
|
36
|
+
getBundle(slug: string): Promise<Response | null>;
|
|
31
37
|
}
|
|
32
38
|
export declare function createRemoteSkillsClient(): RemoteSkillsClient | null;
|
package/dist/lib/run-state.d.ts
CHANGED
|
@@ -19,6 +19,10 @@ export interface SkillRunRecord {
|
|
|
19
19
|
args: string[];
|
|
20
20
|
startedAt: string;
|
|
21
21
|
completedAt?: string;
|
|
22
|
+
/** Exit code of the skill child process, when one was observed. */
|
|
23
|
+
exitCode?: number;
|
|
24
|
+
/** Wall time between startedAt and completedAt, in milliseconds. */
|
|
25
|
+
durationMs?: number;
|
|
22
26
|
remote: boolean;
|
|
23
27
|
remoteRunId?: string;
|
|
24
28
|
costCents?: number;
|
|
@@ -51,6 +55,7 @@ export declare function completeSkillRun(context: SkillRunContext, patch: {
|
|
|
51
55
|
error?: string;
|
|
52
56
|
remoteRunId?: string;
|
|
53
57
|
costCents?: number;
|
|
58
|
+
exitCode?: number;
|
|
54
59
|
}): SkillRunRecord;
|
|
55
60
|
export declare function updateSkillRun(context: SkillRunContext, patch: Partial<SkillRunRecord>): SkillRunRecord;
|
|
56
61
|
export declare function writeRunLogs(context: SkillRunContext, stdout?: string, stderr?: string): void;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type PackedSkillBundle } from "./skill-bundle.js";
|
|
2
|
+
/** Environment variable holding the HMAC signing key. Never logged, never printed. */
|
|
3
|
+
export declare const SKILLS_SIGNING_KEY_ENV = "SKILLS_SIGNING_KEY";
|
|
4
|
+
/** Environment variable naming the source commit the bundle was built from. */
|
|
5
|
+
export declare const SKILLS_SOURCE_COMMIT_ENV = "SKILLS_SOURCE_COMMIT";
|
|
6
|
+
/** Prefix of the signature string. The remainder is lowercase hex. */
|
|
7
|
+
export declare const SIGNATURE_PREFIX = "hmac-sha256:";
|
|
8
|
+
export interface SkillBundleManifest {
|
|
9
|
+
name: string;
|
|
10
|
+
version: string;
|
|
11
|
+
source_commit: string;
|
|
12
|
+
/** Canonical sha256 of the bundle bytes (the skill's content address). */
|
|
13
|
+
content_hash: string;
|
|
14
|
+
/** `hmac-sha256:<hex>` over the bundle bytes. Omitted when no key is available. */
|
|
15
|
+
signature?: string;
|
|
16
|
+
published_at: string;
|
|
17
|
+
}
|
|
18
|
+
export interface BuildSkillBundleOptions {
|
|
19
|
+
name: string;
|
|
20
|
+
/** The skill directory to pack. */
|
|
21
|
+
dir: string;
|
|
22
|
+
version: string;
|
|
23
|
+
/** Source commit the skill came from. `unknown` when the provenance is unavailable. */
|
|
24
|
+
sourceCommit: string;
|
|
25
|
+
/** Signing key. Defaults to reading process.env[SKILLS_SIGNING_KEY_ENV]. */
|
|
26
|
+
signingKey?: string;
|
|
27
|
+
/** Explicit published_at. Defaults to now. Tests only. */
|
|
28
|
+
publishedAt?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface BuiltSkillBundle {
|
|
31
|
+
bundle: PackedSkillBundle;
|
|
32
|
+
manifest: SkillBundleManifest;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Resolve the signing key from the environment. Returns null when unset, and the
|
|
36
|
+
* caller decides how to behave (omit the signature, warn, or refuse) — this function
|
|
37
|
+
* never touches stdout, so nothing about the key can leak through it.
|
|
38
|
+
*/
|
|
39
|
+
export declare function resolveSigningKey(env?: Record<string, string | undefined>): string | null;
|
|
40
|
+
/** Sign canonical bundle bytes with an HMAC key. Returns `hmac-sha256:<hex>`. */
|
|
41
|
+
export declare function signBundleBytes(bytes: Uint8Array, key: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* Verify a signature string against bundle bytes and a key. Returns true only for a
|
|
44
|
+
* well-formed `hmac-sha256:<hex>` signature computed over exactly these bytes.
|
|
45
|
+
* timingSafeEqual keeps the comparison from leaking a byte-at-a-time signal; the
|
|
46
|
+
* length check is a format check (a hex digest is a fixed length), not a leak.
|
|
47
|
+
*/
|
|
48
|
+
export declare function verifyBundleSignature(bytes: Uint8Array, signature: string, key: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Pack a skill directory and build its signed manifest in one call — the unit the CI
|
|
51
|
+
* bundle script, push, and pull all share, so a bundle built by CI and one pushed by
|
|
52
|
+
* a machine agree on the canonical content_hash by construction.
|
|
53
|
+
*/
|
|
54
|
+
export declare function buildSkillBundle(options: BuildSkillBundleOptions): BuiltSkillBundle;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type PortableSkillManifest } from "./portable-skills-types.js";
|
|
2
|
+
import type { SkillValidationMessage } from "./skill-validation.js";
|
|
3
|
+
/**
|
|
4
|
+
* Field-level validator implementing the hasna.skill.v1 JSON Schema
|
|
5
|
+
* (schemas/skill.schema.json). Checks the portable manifest against the
|
|
6
|
+
* contract and verifies the self-referencing content_hash when a skill
|
|
7
|
+
* folder is available. Returns exact field errors with `contract.*` codes.
|
|
8
|
+
*
|
|
9
|
+
* The parity test (skill-contract.test.ts) asserts this validator and the
|
|
10
|
+
* schema file agree on required fields, runtime/sandbox enums, and the
|
|
11
|
+
* system-deps allowlist, so the two cannot drift apart silently.
|
|
12
|
+
*/
|
|
13
|
+
export declare const SEMVER_PATTERN = "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$";
|
|
14
|
+
export declare const CONTENT_HASH_PATTERN = "^[a-f0-9]{64}$";
|
|
15
|
+
export declare const ENV_REFERENCE_PATTERN = "^[A-Z0-9_]+$";
|
|
16
|
+
export declare const MAX_RUNTIME_TIMEOUT_SECONDS = 900;
|
|
17
|
+
export declare const DEFAULT_RUNTIME_TIMEOUT_SECONDS = 900;
|
|
18
|
+
export interface PortableContractOptions {
|
|
19
|
+
/**
|
|
20
|
+
* Whether the manifest is the full portable contract (a skill.json exists).
|
|
21
|
+
* When true, the runtime contract and content_hash are required; a manifest
|
|
22
|
+
* present without its integrity field is not portable. SKILL.md-only legacy
|
|
23
|
+
* skills stay under the relaxed rule.
|
|
24
|
+
*/
|
|
25
|
+
strict?: boolean;
|
|
26
|
+
/** Skill folder for content_hash verification. */
|
|
27
|
+
skillPath?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Validate the portable manifest against the hasna.skill.v1 contract.
|
|
31
|
+
* Returns issues only; callers combine with existing directory validation.
|
|
32
|
+
*/
|
|
33
|
+
export declare function validatePortableManifestContract(manifest: PortableSkillManifest | undefined, options?: PortableContractOptions): SkillValidationMessage[];
|
|
34
|
+
/** Read a skill.json from disk and parse it, tolerating absence. */
|
|
35
|
+
export declare function readRawSkillJson(skillPath: string): Record<string, unknown> | undefined;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { PortableSkillManifest } from "./portable-skills-types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Canonical content hashing for the hasna.skill.v1 portable bundle.
|
|
4
|
+
*
|
|
5
|
+
* The hash covers the normalized skill bundle: skill.json (blank-canonicalized —
|
|
6
|
+
* its own `content_hash` field removed, keys sorted, line endings normalized)
|
|
7
|
+
* plus SKILL.md and every file under src/, scripts/, assets/, and references/,
|
|
8
|
+
* plus AGENTS.md, package.json, and tsconfig.json. Entries are sorted by
|
|
9
|
+
* relative path and hash-stable across platforms (posix separators, LF
|
|
10
|
+
* endings, sorted keys), so two checkouts of the same skill produce the same
|
|
11
|
+
* hash regardless of OS or editor.
|
|
12
|
+
*
|
|
13
|
+
* Excluded, mirroring the port/copy rules: node_modules, .git, dist, build,
|
|
14
|
+
* .turbo, dot-entries, and symlinks (symlinks are validation errors anyway).
|
|
15
|
+
*/
|
|
16
|
+
export declare const CONTENT_HASH_ALGORITHM = "sha256";
|
|
17
|
+
export declare const CONTENT_HASH_HEX_LENGTH = 64;
|
|
18
|
+
/** Normalize CRLF/CR to LF for hash stability across platforms. */
|
|
19
|
+
export declare function normalizeLineEndings(content: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Blank-canonicalize a skill.json manifest for hashing: parse it, drop the
|
|
22
|
+
* self-referencing `content_hash` field, and re-serialize with sorted keys so
|
|
23
|
+
* key order and the hash's own presence never change the digest.
|
|
24
|
+
*/
|
|
25
|
+
export declare function canonicalizeManifest(raw: string): string;
|
|
26
|
+
export interface BundleFile {
|
|
27
|
+
/** Posix relative path from the skill root, e.g. `scripts/setup.sh`. */
|
|
28
|
+
rel: string;
|
|
29
|
+
/** Normalized text content for text files; raw buffer for binary files. */
|
|
30
|
+
content: Uint8Array;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Collect the normalized bundle files for a skill folder, sorted by relative
|
|
34
|
+
* path. Only the documented coverage set is included.
|
|
35
|
+
*/
|
|
36
|
+
export declare function collectBundleFiles(skillPath: string): BundleFile[];
|
|
37
|
+
/**
|
|
38
|
+
* Compute the canonical content hash of a skill folder. Stable across
|
|
39
|
+
* platforms: sorted posix paths, LF line endings, canonicalized manifest.
|
|
40
|
+
*/
|
|
41
|
+
export declare function computeContentHash(skillPath: string): string;
|
|
42
|
+
export interface ContentHashVerification {
|
|
43
|
+
/** Whether the skill declares a content_hash at all. */
|
|
44
|
+
declared: boolean;
|
|
45
|
+
/** Whether the declared hash is present, well-formed, and matches the bundle. */
|
|
46
|
+
valid: boolean;
|
|
47
|
+
/** The declared value, if any. */
|
|
48
|
+
declaredHash?: string;
|
|
49
|
+
/** The recomputed hash over the current bundle. */
|
|
50
|
+
computedHash?: string;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Verify a skill folder's declared content_hash against the recomputed
|
|
54
|
+
* canonical hash of the current bundle. A missing declaration or a mismatch
|
|
55
|
+
* fails; a malformed declaration fails.
|
|
56
|
+
*/
|
|
57
|
+
export declare function verifyContentHash(skillPath: string, manifest?: PortableSkillManifest): ContentHashVerification;
|
|
58
|
+
/** Path sanity helper used by the contract validator: the skill folder exists. */
|
|
59
|
+
export declare function skillFolderExists(skillPath: string): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Canonical SKILL.md document hash for home-vs-corpus comparison.
|
|
62
|
+
*
|
|
63
|
+
* The bundle-wide hash above covers a whole skill folder; agent home
|
|
64
|
+
* directories carry only a SKILL.md, so the home comparison hashes exactly
|
|
65
|
+
* that one document. The normalization is the canonical one: LF line endings
|
|
66
|
+
* (LF-invariant, so the same document hashes identically across platforms),
|
|
67
|
+
* with the single agent-adaptation delta removed — `user_invocable` frontmatter
|
|
68
|
+
* lines, which `sync` injects for Claude and strips for every other agent.
|
|
69
|
+
* Two copies that differ only in those two ways hash identically, so an
|
|
70
|
+
* unmarked home copy that matches the canonical SKILL.md modulo adaptation is
|
|
71
|
+
* recognised as an exact match.
|
|
72
|
+
*/
|
|
73
|
+
export declare function canonicalAgentSkillMarkdown(content: string): string;
|
|
74
|
+
/** Canonical hash of a SKILL.md document (modulo LF endings and user_invocable). */
|
|
75
|
+
export declare function hashSkillMarkdown(content: string): string;
|
|
76
|
+
/** Canonical hash of the SKILL.md at `path`. */
|
|
77
|
+
export declare function hashSkillMarkdownFile(path: string): string;
|