@hasna/skills 0.1.62 → 0.1.64
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 +38 -12
- package/bin/index.js +15743 -21709
- package/bin/mcp.js +3866 -11522
- package/bin/migrate.js +281 -35
- package/bin/server.js +5805 -2682
- package/bin/worker.js +5280 -2388
- package/dist/cli/commands/publish.d.ts +2 -0
- package/dist/cli/commands/registry-reconcile.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 +5 -2
- package/dist/index.js +5386 -13739
- package/dist/lib/agent-sync.d.ts +61 -6
- package/dist/lib/auth-store.d.ts +37 -0
- package/dist/lib/config.d.ts +51 -0
- package/dist/lib/home-adoption.d.ts +91 -0
- package/dist/lib/home-census.d.ts +26 -0
- package/dist/lib/home-migration.d.ts +60 -0
- package/dist/lib/native-storage.d.ts +1 -1
- package/dist/lib/portable-skills-files.d.ts +21 -1
- package/dist/lib/portable-skills-types.d.ts +46 -0
- package/dist/lib/portable-skills.d.ts +35 -6
- package/dist/lib/pull.d.ts +97 -0
- package/dist/lib/registry-reconcile.d.ts +114 -0
- package/dist/lib/registry.d.ts +7 -4
- package/dist/lib/remote-client.d.ts +124 -1
- package/dist/lib/remote-registry.d.ts +26 -0
- package/dist/lib/revision.d.ts +29 -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 +49728 -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 +50 -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 +24 -0
- package/dist/server/skills-api.d.ts +170 -0
- package/dist/server/sqlite-store.d.ts +131 -0
- package/dist/server/store-fixtures.d.ts +25 -0
- package/dist/server/store.d.ts +170 -0
- package/dist/server/types.d.ts +337 -0
- package/dist/server/worker.d.ts +4 -0
- package/dist/storage.js +39 -2
- package/docs/skill-standard.md +211 -39
- package/migrations/postgres/0003_run_outputs_governance.sql +83 -0
- package/migrations/postgres/0004_hosted_pins.sql +28 -0
- package/migrations/postgres/0005_revision_tombstone_registry.sql +37 -0
- package/migrations/postgres/0005_tag_projection.sql +36 -0
- package/migrations/sqlite/0003_run_outputs_governance.sql +58 -0
- package/migrations/sqlite/0004_hosted_pins.sql +21 -0
- package/migrations/sqlite/0005_revision_tombstone_registry.sql +18 -0
- package/migrations/sqlite/0005_tag_projection.sql +25 -0
- package/package.json +12 -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,
|
|
@@ -46,6 +56,18 @@ export declare function agentGlobalSkillsDir(agent: SyncAgent, homeDir?: string)
|
|
|
46
56
|
* would corrupt meaning, and corpus/instruction skills are authored tool-neutral.
|
|
47
57
|
*/
|
|
48
58
|
export declare function adaptSkillMdForAgent(skillMd: string, agent: string): string;
|
|
59
|
+
/**
|
|
60
|
+
* The sentence every sync pointer stub carries in its body. It survives per-agent
|
|
61
|
+
* adaptation (adaptSkillMdForAgent only touches `user_invocable`), so it is the stable
|
|
62
|
+
* fingerprint for "this document is a pointer, not the skill's real content".
|
|
63
|
+
*/
|
|
64
|
+
export declare const POINTER_MARKER_PHRASE = "This is an executable skill from the @hasna/skills catalog";
|
|
65
|
+
/**
|
|
66
|
+
* True when a SKILL.md is a sync pointer stub: frontmatter declares `kind: executable`
|
|
67
|
+
* AND the body carries the canonical pointer sentence. A full content document is never
|
|
68
|
+
* a stub even when it mentions the sentence, because it lacks the kind marker.
|
|
69
|
+
*/
|
|
70
|
+
export declare function isPointerSkillMd(markdown: string): boolean;
|
|
49
71
|
/** A pointer SKILL.md for an executable skill: what it is and how to actually run it. */
|
|
50
72
|
export declare function pointerSkillMd(name: string, description: string): string;
|
|
51
73
|
export type SyncActionKind = "create" | "update" | "skip";
|
|
@@ -69,18 +91,49 @@ export interface SyncSkillsOptions {
|
|
|
69
91
|
force?: boolean;
|
|
70
92
|
/** Corpus root override. Tests only. */
|
|
71
93
|
rootDir?: string;
|
|
94
|
+
/**
|
|
95
|
+
* Explicit canonical-corpus source: a directory of skill folders, or the monorepo
|
|
96
|
+
* package root (which contains `skills/`). Takes precedence over
|
|
97
|
+
* $SKILLS_SOURCE, which takes precedence over the installed corpus cache.
|
|
98
|
+
* Agent-workflow skills are NOT part of the public repo corpus anymore — they
|
|
99
|
+
* moved to the private per-station store (hasna-internal/fleet-resources) and
|
|
100
|
+
* reach sync through the installed cache — so a package root resolves to
|
|
101
|
+
* `skills/` only.
|
|
102
|
+
*/
|
|
103
|
+
sourceDir?: string;
|
|
72
104
|
/** Home directory override for agent skill dirs. Tests only. */
|
|
73
105
|
homeDir?: string;
|
|
74
106
|
}
|
|
75
107
|
export interface SyncSkillsResult {
|
|
76
108
|
actions: AgentSyncAction[];
|
|
77
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Resolve where sync reads the canonical corpus from.
|
|
112
|
+
*
|
|
113
|
+
* The package ships no bundled corpus. Precedence is explicit-over-ambient:
|
|
114
|
+
* 1. `options.sourceDir` - an explicit source: a corpus dir, or a package root
|
|
115
|
+
* containing `skills/`
|
|
116
|
+
* 2. `$SKILLS_SOURCE` - the ambient spelling of the same thing
|
|
117
|
+
* 3. the installed cache - `getPortableSkillsRoot()` (what `skills pull` writes),
|
|
118
|
+
* resolved through `resolveCorpusRoot` so a migrated owner layout
|
|
119
|
+
* (~/.hasna/skills/skills/) is read in preference to `installed/`. This cache is
|
|
120
|
+
* also where private agent-workflow skills arrive from the per-station store
|
|
121
|
+
* (hasna-internal/fleet-resources) and get synced into agent folders.
|
|
122
|
+
*
|
|
123
|
+
* A missing explicit source is an error, not a fallback to "nothing": the whole point
|
|
124
|
+
* of zero-corpus is that sync must not silently sync an empty corpus because the
|
|
125
|
+
* package directory changed shape.
|
|
126
|
+
*/
|
|
127
|
+
export declare function resolveSyncCorpus(options?: SyncSkillsOptions): {
|
|
128
|
+
roots: string[];
|
|
129
|
+
source: "source" | "corpus";
|
|
130
|
+
};
|
|
78
131
|
export declare function syncSkillsToAgents(options?: SyncSkillsOptions): SyncSkillsResult;
|
|
79
132
|
export interface WriteManagedAgentSkillParams {
|
|
80
133
|
skill: string;
|
|
81
134
|
agent: SyncAgent;
|
|
82
135
|
skillMd: string;
|
|
83
|
-
source?: "
|
|
136
|
+
source?: "source" | "corpus";
|
|
84
137
|
resourceDir?: string;
|
|
85
138
|
homeDir?: string;
|
|
86
139
|
dryRun?: boolean;
|
|
@@ -90,9 +143,11 @@ export interface WriteManagedAgentSkillParams {
|
|
|
90
143
|
* Write one skill into one agent's global folder, non-clobbering.
|
|
91
144
|
*
|
|
92
145
|
* A directory this tool has written before carries the marker file and is replaced with
|
|
93
|
-
* an exact mirror
|
|
94
|
-
*
|
|
95
|
-
*
|
|
146
|
+
* an exact mirror — except that a managed home holding full content is never silently
|
|
147
|
+
* replaced with an executable pointer stub (that would be data loss; it is refused
|
|
148
|
+
* unless `force` is passed). A directory with a SKILL.md but no marker is the user's
|
|
149
|
+
* own skill and is skipped unless `force` explicitly adopts it. Any other pre-existing
|
|
150
|
+
* unmarked directory is always left untouched. A fresh directory is created.
|
|
96
151
|
*/
|
|
97
152
|
export declare function writeManagedAgentSkill(params: WriteManagedAgentSkillParams): AgentSyncAction;
|
|
98
153
|
export interface ManagedDirWriteResult {
|
package/dist/lib/auth-store.d.ts
CHANGED
|
@@ -1,3 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* auth.json lives at the skills app root, beside config.json.
|
|
3
|
+
*
|
|
4
|
+
* Resolved through getDataDir() so that $HASNA_SKILLS_DIR relocates the
|
|
5
|
+
* credential file along with the rest of the app's state. It used to be an
|
|
6
|
+
* import-time constant composed from homedir(), so with the override set the
|
|
7
|
+
* CLI stored its API key at ~/.hasna/skills/auth.json while config, corpus,
|
|
8
|
+
* and database all moved — the same override-only-half-works split getDataDir()
|
|
9
|
+
* documents for its own history.
|
|
10
|
+
*
|
|
11
|
+
* The legacy ~/.skills/auth.json stays a $HOME concern, exactly like
|
|
12
|
+
* getDataDir()'s legacy merge (which is deliberately skipped for an overridden
|
|
13
|
+
* dir): it is still read as a fallback and removed by clearAuthConfig(), but
|
|
14
|
+
* never written when the override is set. Like getDataDir(), the home is read
|
|
15
|
+
* from the environment at call time — os.homedir() caches its answer after the
|
|
16
|
+
* first call, so a process that re-points $HOME would keep composing the old
|
|
17
|
+
* path.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getAuthFilePath(): string;
|
|
20
|
+
/**
|
|
21
|
+
* Write-free credential path resolution for read-only paths (e.g. `sync --dry-run`).
|
|
22
|
+
*
|
|
23
|
+
* getAuthFilePath() routes through getDataDir(), which WRITES (mkdirs the app dir,
|
|
24
|
+
* merges legacy ~/.skills content, copies the legacy config). A dry run must read
|
|
25
|
+
* the same credential file a real run would without performing any of that.
|
|
26
|
+
*/
|
|
27
|
+
export declare function getAuthFilePathReadOnly(): string;
|
|
1
28
|
/**
|
|
2
29
|
* Stored credentials for a Skills API instance.
|
|
3
30
|
*
|
|
@@ -18,6 +45,16 @@ export declare function getAuthConfig(): AuthConfig | null;
|
|
|
18
45
|
export declare function saveAuthConfig(config: AuthConfig): void;
|
|
19
46
|
export declare function clearAuthConfig(): void;
|
|
20
47
|
export declare function getApiKey(): string | null;
|
|
48
|
+
/**
|
|
49
|
+
* Write-free credential read for read-only paths (e.g. `sync --dry-run`).
|
|
50
|
+
*
|
|
51
|
+
* getAuthConfig() resolves through getAuthFilePath() -> getDataDir(), which
|
|
52
|
+
* writes. Reads the same files (canonical auth.json, then the legacy ~/.skills
|
|
53
|
+
* fallback) without creating or migrating anything, and without touching the
|
|
54
|
+
* write path's module-level cache.
|
|
55
|
+
*/
|
|
56
|
+
export declare function getAuthConfigReadOnly(): AuthConfig | null;
|
|
57
|
+
export declare function getApiKeyReadOnly(): string | null;
|
|
21
58
|
export declare function normalizeSkillsApiOrigin(apiUrl: string): string;
|
|
22
59
|
/**
|
|
23
60
|
* Origin every credential-bearing request is sent to.
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -58,12 +58,63 @@ export declare const DATA_DIR_ENV = "HASNA_SKILLS_DIR";
|
|
|
58
58
|
* `custom` without colliding with anything.
|
|
59
59
|
*/
|
|
60
60
|
export declare const INSTALLED_SKILLS_DIRNAME = "installed";
|
|
61
|
+
/**
|
|
62
|
+
* Subfolder of the data directory holding the migrated corpus cache — the
|
|
63
|
+
* owner-layout replacement for installed/ after `skills storage migrate`
|
|
64
|
+
* (~/.hasna/skills/{skills,logs,outputs}).
|
|
65
|
+
*
|
|
66
|
+
* The marker file inside it (LAYOUT_MIGRATION_RECORD) is the authority: a
|
|
67
|
+
* skills/ directory someone created by hand is not the corpus and never will
|
|
68
|
+
* be treated as one (see isOwnerLayoutMigrated).
|
|
69
|
+
*/
|
|
70
|
+
export declare const SKILLS_CACHE_DIRNAME = "skills";
|
|
71
|
+
/**
|
|
72
|
+
* Marker file inside the corpus cache proving the owner-layout migration ran;
|
|
73
|
+
* also its record (see migrateOwnerLayout in home-migration.ts).
|
|
74
|
+
*/
|
|
75
|
+
export declare const LAYOUT_MIGRATION_RECORD = ".layout-migration.json";
|
|
76
|
+
/**
|
|
77
|
+
* True once the owner layout has been migrated (the record is the authority).
|
|
78
|
+
*
|
|
79
|
+
* Lives here — rather than in home-migration.ts — because the canonical corpus
|
|
80
|
+
* resolver in portable-skills.ts must consult it too, and home-migration.ts
|
|
81
|
+
* depends on portable-skills.ts; this module sits below both.
|
|
82
|
+
*/
|
|
83
|
+
export declare function isOwnerLayoutMigrated(appDir: string): boolean;
|
|
61
84
|
/**
|
|
62
85
|
* Get the data directory for skills global config/data.
|
|
63
86
|
* Default: ~/.hasna/skills/, overridable with $HASNA_SKILLS_DIR.
|
|
64
87
|
* Auto-migrates from ~/.skills/ and ~/.skillsrc without deleting legacy data.
|
|
65
88
|
*/
|
|
66
89
|
export declare function getDataDir(): string;
|
|
90
|
+
/**
|
|
91
|
+
* Write-free data-dir resolution for read-only paths (e.g. `sync --dry-run`).
|
|
92
|
+
*
|
|
93
|
+
* getDataDir() itself writes: it mkdirs the app folder, merges legacy ~/.skills
|
|
94
|
+
* content and copies the legacy config file. A dry run must resolve the SAME
|
|
95
|
+
* directory a real run would use without performing any of that — mirror the path
|
|
96
|
+
* logic only, reading $HASNA_SKILLS_DIR and $HOME exactly the way getDataDir does.
|
|
97
|
+
*/
|
|
98
|
+
export declare function getDataDirReadOnly(): string;
|
|
99
|
+
/**
|
|
100
|
+
* Get the config file path for a given scope, write-free (see getDataDirReadOnly).
|
|
101
|
+
*/
|
|
102
|
+
export declare function getConfigPathReadOnly(scope: ConfigScope): string;
|
|
103
|
+
/**
|
|
104
|
+
* Load merged config (project-local overrides global) without the writes
|
|
105
|
+
* getDataDir() performs on the write path.
|
|
106
|
+
*
|
|
107
|
+
* The write path folds the legacy ~/.skillsrc into canonical config.json as part of
|
|
108
|
+
* getDataDir()'s migration — copied ONLY when canonical config.json is absent, and
|
|
109
|
+
* the legacy migration is skipped entirely when a data-directory override is active.
|
|
110
|
+
* This mirrors that FILE-LEVEL precedence, never field-level merging: canonical
|
|
111
|
+
* config.json, when present, is the whole global config; legacy ~/.skillsrc is read
|
|
112
|
+
* only in the exact situation the write path would copy it (no canonical file, no
|
|
113
|
+
* override). Field-level merging would inherit a stale legacy origin beneath a
|
|
114
|
+
* canonical config that omits apiUrl — and the client sends its stored credential to
|
|
115
|
+
* whatever origin resolves, so divergence from the write path is credential-bearing.
|
|
116
|
+
*/
|
|
117
|
+
export declare function loadConfigReadOnly(): SkillsConfig;
|
|
67
118
|
/**
|
|
68
119
|
* Get the config file path for a given scope
|
|
69
120
|
*/
|
|
@@ -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,26 @@
|
|
|
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
|
+
/** True when the home's SKILL.md is a sync pointer stub rather than real content. */
|
|
12
|
+
homeStub?: boolean;
|
|
13
|
+
/** True when the canonical corpus entry renders as a pointer stub (executable skill). */
|
|
14
|
+
canonicalStub?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface DriftCensus {
|
|
17
|
+
entries: DriftEntry[];
|
|
18
|
+
/** Homes that exist and were checked. */
|
|
19
|
+
homesChecked: number;
|
|
20
|
+
/** Unmarked home skill dirs (adoption candidates, not drift). */
|
|
21
|
+
unmarked: number;
|
|
22
|
+
/** Marked home skill dirs. */
|
|
23
|
+
managed: number;
|
|
24
|
+
clean: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare function censusHomeDrift(options?: AdoptionOptions): DriftCensus;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type PortableSkillOptions } from "./portable-skills.js";
|
|
2
|
+
export { LAYOUT_MIGRATION_RECORD, SKILLS_CACHE_DIRNAME, isOwnerLayoutMigrated } from "./config.js";
|
|
3
|
+
export declare const LOGS_DIRNAME = "logs";
|
|
4
|
+
export declare const OUTPUTS_DIRNAME = "outputs";
|
|
5
|
+
export declare const LEGACY_CUSTOM_DIRNAME = "custom";
|
|
6
|
+
export interface LayoutMigrationRecord {
|
|
7
|
+
version: 1;
|
|
8
|
+
/** ISO timestamp of the migration. */
|
|
9
|
+
migratedAt: string;
|
|
10
|
+
/** The entries moved: "installed" for the old corpus dir, then each legacy flat dir name. */
|
|
11
|
+
moved: string[];
|
|
12
|
+
note: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function layoutMigrationRecordPath(appDir: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Resolve the corpus the sync/fan-out reads from.
|
|
17
|
+
*
|
|
18
|
+
* The precedence lives in ONE place, getPortableSkillsRoot():
|
|
19
|
+
* 1. options.rootDir — named outright, no suffix (unchanged contract)
|
|
20
|
+
* 2. migrated owner layout — <app folder>/skills when a migration record exists
|
|
21
|
+
* 3. the pre-migration corpus — installed/, with the legacy auto-copy migration
|
|
22
|
+
*
|
|
23
|
+
* The migration record is required: a skills/ directory someone created by hand
|
|
24
|
+
* is not the corpus and never will be treated as one.
|
|
25
|
+
*
|
|
26
|
+
* This wrapper exists so pull/agent-sync and any future caller can name the
|
|
27
|
+
* canonical resolver explicitly; delegating keeps a single implementation for
|
|
28
|
+
* list/search/info/push/sync alike (bug 170b0e9b was exactly the opposite — a
|
|
29
|
+
* second resolution that read installed/ while this one read skills/).
|
|
30
|
+
*/
|
|
31
|
+
export declare function resolveCorpusRoot(options?: PortableSkillOptions): string;
|
|
32
|
+
export type LayoutMigrationStatus = "already-migrated" | "refused" | "migrated" | "nothing-to-do";
|
|
33
|
+
export interface LayoutMigrationResult {
|
|
34
|
+
status: LayoutMigrationStatus;
|
|
35
|
+
/** Why a run refused; absent otherwise. */
|
|
36
|
+
reason?: string;
|
|
37
|
+
/** The source entries moved (or that a dry-run would move). */
|
|
38
|
+
moved: string[];
|
|
39
|
+
/** Directories created by the run. */
|
|
40
|
+
created: string[];
|
|
41
|
+
/** The record written, when a run actually migrated. */
|
|
42
|
+
record?: LayoutMigrationRecord;
|
|
43
|
+
}
|
|
44
|
+
export interface LayoutMigrationOptions {
|
|
45
|
+
dryRun?: boolean;
|
|
46
|
+
/** App-folder override for tests. */
|
|
47
|
+
homeDir?: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Migrate the owner layout, idempotently.
|
|
51
|
+
*
|
|
52
|
+
* - already-migrated: the record exists; nothing happens.
|
|
53
|
+
* - refused: skills/ exists with content and no record, or a legacy dir would
|
|
54
|
+
* collide with an existing skills/<name>; nothing happens.
|
|
55
|
+
* - migrated: installed/ (when present) and every legacy flat dir moved into
|
|
56
|
+
* skills/; logs/ and outputs/ created; the record written.
|
|
57
|
+
* - nothing-to-do: no installed/ and no legacy dirs; logs/ and outputs/ are
|
|
58
|
+
* still created (lazily) unless the run is a dry-run.
|
|
59
|
+
*/
|
|
60
|
+
export declare function migrateOwnerLayout(options?: LayoutMigrationOptions): LayoutMigrationResult;
|
|
@@ -94,7 +94,7 @@ export declare function getStorageDatabaseEnv(env?: Record<string, string | unde
|
|
|
94
94
|
export declare function getSkillsStorageDatabaseUrl(env?: Record<string, string | undefined>): string | undefined;
|
|
95
95
|
export declare function getStorageDatabaseUrl(env?: Record<string, string | undefined>): string | undefined;
|
|
96
96
|
export interface SkillsNativeStorageStatus {
|
|
97
|
-
package: "
|
|
97
|
+
package: "skills";
|
|
98
98
|
tables: readonly SkillsStorageTable[];
|
|
99
99
|
env: {
|
|
100
100
|
databaseUrl: string;
|
|
@@ -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;
|
|
@@ -7,11 +7,21 @@ export * from "./portable-skills-types.js";
|
|
|
7
7
|
/**
|
|
8
8
|
* Resolve the corpus: the directory holding one folder per installed skill.
|
|
9
9
|
*
|
|
10
|
+
* THIS IS THE ONE CANONICAL CORPUS RESOLUTION. Every local discovery and
|
|
11
|
+
* publish path — list, search, info, push, pull, sync, registry — reads the
|
|
12
|
+
* corpus through this function (directly or via resolveCorpusRoot(), which
|
|
13
|
+
* delegates here), so a migrated owner layout is never bypassed by a path that
|
|
14
|
+
* still resolves installed/ (bug 170b0e9b: 'skills list --all' returned 87
|
|
15
|
+
* entries while the migrated corpus held 688).
|
|
16
|
+
*
|
|
10
17
|
* Precedence is explicit-over-ambient, most specific first:
|
|
11
|
-
* 1. `options.rootDir`
|
|
12
|
-
* 2.
|
|
13
|
-
*
|
|
14
|
-
*
|
|
18
|
+
* 1. `options.rootDir` - the corpus, named outright (no suffix)
|
|
19
|
+
* 2. the migrated owner layout - <app folder>/skills/ when a migration record
|
|
20
|
+
* exists there (the record is the authority; a skills/ directory someone
|
|
21
|
+
* created by hand is not the corpus)
|
|
22
|
+
* 3. `getDataDir()` - <app folder>/installed (pre-migration corpus,
|
|
23
|
+
* with the legacy auto-copy migration), where the app folder is
|
|
24
|
+
* $HASNA_SKILLS_DIR, else ~/.hasna/skills
|
|
15
25
|
*
|
|
16
26
|
* The app folder holds app data (config.json, skills.db, auth.json); the corpus
|
|
17
27
|
* is a named subfolder of it, matching every sibling Hasna app. One variable
|
|
@@ -46,6 +56,24 @@ export interface CorpusSkillMeta {
|
|
|
46
56
|
tags?: string[];
|
|
47
57
|
version?: string;
|
|
48
58
|
kind?: SkillKind;
|
|
59
|
+
/**
|
|
60
|
+
* The hosted registry's revision id for this skill (todos d061fcda), when the
|
|
61
|
+
* instance reported one. Carried onto the metadata-only pull path so the pull marker
|
|
62
|
+
* records which revision was installed there too.
|
|
63
|
+
*/
|
|
64
|
+
revisionId?: string;
|
|
65
|
+
/**
|
|
66
|
+
* The row's SKILL.md, served in the published metadata so a client can recompute the
|
|
67
|
+
* content-addressed revision id and PROVE the declared revision identifies the content
|
|
68
|
+
* it received (todos d061fcda).
|
|
69
|
+
*/
|
|
70
|
+
skillMd?: string;
|
|
71
|
+
/**
|
|
72
|
+
* The row's stored source (the payload's own `source` is always the client view
|
|
73
|
+
* "remote"). The canonical revision hash is computed over the stored value, so the
|
|
74
|
+
* client needs it to recompute the id.
|
|
75
|
+
*/
|
|
76
|
+
publishedSource?: string;
|
|
49
77
|
}
|
|
50
78
|
export interface WriteCorpusSkillInput {
|
|
51
79
|
name: string;
|
|
@@ -54,8 +82,9 @@ export interface WriteCorpusSkillInput {
|
|
|
54
82
|
meta?: CorpusSkillMeta | null;
|
|
55
83
|
}
|
|
56
84
|
/**
|
|
57
|
-
* Write a skill fetched from a Skills instance into the local corpus
|
|
58
|
-
*
|
|
85
|
+
* Write a skill fetched from a Skills instance into the local corpus (the
|
|
86
|
+
* canonical root — installed/ before the layout migration, <app folder>/skills/
|
|
87
|
+
* after it), so loadRegistry() surfaces it to both the CLI
|
|
59
88
|
* (`skills list --all`) and the MCP (`list_skills`) with no further step — the whole
|
|
60
89
|
* point of the pull: the corpus is already a first-class registry source.
|
|
61
90
|
*
|