@hasna/skills 0.1.30 → 0.1.31
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/bin/index.js +1593 -10958
- package/bin/mcp.js +1516 -11651
- package/dist/index.d.ts +4 -0
- package/dist/index.js +686 -9552
- package/dist/lib/auth-store.d.ts +1 -1
- package/dist/lib/config.d.ts +1 -0
- package/dist/lib/discovery.d.ts +23 -0
- package/dist/lib/pricing.d.ts +89 -0
- package/dist/lib/remote-client.d.ts +18 -0
- package/dist/lib/remote-run-contract.d.ts +29 -0
- package/dist/mcp/http.d.ts +1 -1
- package/package.json +3 -14
- package/skills/apidocs/.claude/settings.json +5 -0
- package/skills/security-audit/src/index.ts +1 -1
- package/skills/skill-academic-journal-matcher/bin/cli.ts +0 -34
- package/skills/skill-action-item-router/bin/cli.ts +0 -34
- package/skills/skill-ad-creative-generator/bin/cli.ts +0 -34
- package/skills/skill-advanced-math/bin/cli.ts +0 -34
- package/skills/skill-analyze-data/bin/cli.ts +0 -19
- package/skills/skill-anomaly-investigator/bin/cli.ts +0 -34
- package/skills/skill-api-test-suite/bin/cli.ts +0 -34
- package/skills/skill-apidocs/bin/cli.ts +0 -87
- package/skills/skill-audio-cleanup-lab/bin/cli.ts +0 -6
- package/skills/skill-audiobook-chapter-proofer/bin/cli.ts +0 -34
- package/skills/skill-banner-ad-suite/bin/cli.ts +0 -34
- package/skills/skill-benchmark-finder/bin/cli.ts +0 -34
- package/skills/skill-bio-sequence-tool/bin/cli.ts +0 -34
- package/skills/skill-blog-topic-cluster/bin/cli.ts +0 -34
- package/skills/skill-brand-style-guide/bin/cli.ts +0 -19
- package/skills/skill-brand-voice-audit/bin/cli.ts +0 -34
- package/skills/skill-budget-variance-analyzer/bin/cli.ts +0 -6
- package/skills/skill-businessactivity/bin/cli.ts +0 -28
- package/skills/skill-calendar-events/bin/cli.ts +0 -34
- package/skills/skill-campaign-metric-brief/bin/cli.ts +0 -34
- package/skills/skill-campaign-moodboard/bin/cli.ts +0 -34
- package/skills/skill-caption-style-stylist/bin/cli.ts +0 -34
- package/skills/skill-chemistry-calculator/bin/cli.ts +0 -34
- package/skills/skill-churn-risk-notifier/bin/cli.ts +0 -34
- package/skills/skill-citation-formatter/bin/cli.ts +0 -34
- package/skills/skill-classroom-newsletter-kit/bin/cli.ts +0 -34
- package/skills/skill-color-palette-harmonizer/bin/cli.ts +0 -34
- package/skills/skill-competitor-ad-analyzer/bin/cli.ts +0 -34
- package/skills/skill-compliance-copy-check/bin/cli.ts +0 -34
- package/skills/skill-compliance-report-pack/bin/cli.ts +0 -34
- package/skills/skill-compress-video/bin/cli.ts +0 -19
- package/skills/skill-consolelog/bin/cli.ts +0 -884
- package/skills/skill-contract-plainlanguage/bin/cli.ts +0 -34
- package/skills/skill-copytone-translator/bin/cli.ts +0 -34
- package/skills/skill-create-blog-article/bin/cli.ts +0 -34
- package/skills/skill-create-ebook/bin/cli.ts +0 -34
- package/skills/skill-crm-note-enhancer/bin/cli.ts +0 -34
- package/skills/skill-customer-journey-mapper/bin/cli.ts +0 -34
- package/skills/skill-dashboard-builder/bin/cli.ts +0 -34
- package/skills/skill-dashboard-narrator/bin/cli.ts +0 -34
- package/skills/skill-data-anonymizer/bin/cli.ts +0 -34
- package/skills/skill-database-explorer/bin/cli.ts +0 -34
- package/skills/skill-dataset-health-check/bin/cli.ts +0 -34
- package/skills/skill-decision-journal/bin/cli.ts +0 -34
- package/skills/skill-delegation-brief-writer/bin/cli.ts +0 -34
- package/skills/skill-destination-briefing/bin/cli.ts +0 -34
- package/skills/skill-diff-viewer/bin/cli.ts +0 -34
- package/skills/skill-domainpurchase/bin/cli.ts +0 -683
- package/skills/skill-domainsearch/bin/cli.ts +0 -410
- package/skills/skill-educational-resource-finder/bin/cli.ts +0 -34
- package/skills/skill-email-campaign/bin/cli.ts +0 -34
- package/skills/skill-exam-readiness-check/bin/cli.ts +0 -34
- package/skills/skill-experiment-power-calculator/bin/cli.ts +0 -34
- package/skills/skill-extract-audio/bin/cli.ts +0 -19
- package/skills/skill-extract-frames/bin/cli.ts +0 -34
- package/skills/skill-extract-invoice/bin/cli.ts +0 -34
- package/skills/skill-family-activity-curator/bin/cli.ts +0 -34
- package/skills/skill-faq-packager/bin/cli.ts +0 -34
- package/skills/skill-feedback-survey-designer/bin/cli.ts +0 -34
- package/skills/skill-field-trip-planner/bin/cli.ts +0 -34
- package/skills/skill-file-organizer/bin/cli.ts +0 -34
- package/skills/skill-folder-tree/bin/cli.ts +0 -34
- package/skills/skill-forecast-scenario-lab/bin/cli.ts +0 -34
- package/skills/skill-form-filler/bin/cli.ts +0 -34
- package/skills/skill-generate-api-client/bin/cli.ts +0 -34
- package/skills/skill-generate-book-cover/bin/cli.ts +0 -34
- package/skills/skill-generate-chart/bin/cli.ts +0 -34
- package/skills/skill-generate-diagram/bin/cli.ts +0 -34
- package/skills/skill-generate-dockerfile/bin/cli.ts +0 -34
- package/skills/skill-generate-documentation/bin/cli.ts +0 -34
- package/skills/skill-generate-docx/bin/cli.ts +0 -6
- package/skills/skill-generate-env/bin/cli.ts +0 -34
- package/skills/skill-generate-excel/bin/cli.ts +0 -34
- package/skills/skill-generate-favicon/bin/cli.ts +0 -34
- package/skills/skill-generate-mock-data/bin/cli.ts +0 -34
- package/skills/skill-generate-pdf/bin/cli.ts +0 -6
- package/skills/skill-generate-pr-description/bin/cli.ts +0 -34
- package/skills/skill-generate-presentation/bin/cli.ts +0 -34
- package/skills/skill-generate-qrcode/bin/cli.ts +0 -34
- package/skills/skill-generate-regex/bin/cli.ts +0 -34
- package/skills/skill-generate-resume/bin/cli.ts +0 -34
- package/skills/skill-generate-sitemap/bin/cli.ts +0 -34
- package/skills/skill-generate-social-posts/bin/cli.ts +0 -34
- package/skills/skill-generate-sql/bin/cli.ts +0 -34
- package/skills/skill-gif-maker/bin/cli.ts +0 -34
- package/skills/skill-github-manager/bin/cli.ts +0 -34
- package/skills/skill-gmail/bin/cli.ts +0 -34
- package/skills/skill-goal-quarterly-roadmap/bin/cli.ts +0 -34
- package/skills/skill-grant-application-drafter/bin/cli.ts +0 -34
- package/skills/skill-grocery-basket-optimizer/bin/cli.ts +0 -34
- package/skills/skill-guest-communication-suite/bin/cli.ts +0 -34
- package/skills/skill-habit-reflection-digest/bin/cli.ts +0 -34
- package/skills/skill-highlight-reel-generator/bin/cli.ts +0 -34
- package/skills/skill-homework-feedback-coach/bin/cli.ts +0 -34
- package/skills/skill-household-maintenance-mgr/bin/cli.ts +0 -34
- package/skills/skill-http-server/bin/cli.ts +0 -34
- package/skills/skill-implementation-agent/bin/cli.ts +0 -34
- package/skills/skill-implementation-plan/bin/cli.ts +0 -34
- package/skills/skill-implementation-todo/bin/cli.ts +0 -34
- package/skills/skill-inbox-priority-planner/bin/cli.ts +0 -34
- package/skills/skill-invoice/bin/cli.ts +0 -20
- package/skills/skill-invoice-dispute-helper/bin/cli.ts +0 -34
- package/skills/skill-itinerary-architect/bin/cli.ts +0 -34
- package/skills/skill-jingle-composer/bin/cli.ts +0 -34
- package/skills/skill-kpi-digest-generator/bin/cli.ts +0 -34
- package/skills/skill-lab-notebook-formatter/bin/cli.ts +0 -34
- package/skills/skill-landing-page-copy/bin/cli.ts +0 -34
- package/skills/skill-latex-table-generator/bin/cli.ts +0 -34
- package/skills/skill-learning-style-profiler/bin/cli.ts +0 -34
- package/skills/skill-lesson-plan-customizer/bin/cli.ts +0 -34
- package/skills/skill-livestream-runofshow/bin/cli.ts +0 -34
- package/skills/skill-longform-structurer/bin/cli.ts +0 -34
- package/skills/skill-lorem-generator/bin/cli.ts +0 -34
- package/skills/skill-managehook/bin/cli.ts +0 -241
- package/skills/skill-managemcp/bin/cli.ts +0 -241
- package/skills/skill-manageskill/bin/cli.ts +0 -241
- package/skills/skill-markdown-validator/bin/cli.ts +0 -34
- package/skills/skill-mcp-builder/bin/cli.ts +0 -34
- package/skills/skill-meal-plan-designer/bin/cli.ts +0 -34
- package/skills/skill-meeting-insight-summarizer/bin/cli.ts +0 -34
- package/skills/skill-merge-pdfs/bin/cli.ts +0 -34
- package/skills/skill-microcopy-generator/bin/cli.ts +0 -34
- package/skills/skill-mindfulness-prompt-cache/bin/cli.ts +0 -34
- package/skills/skill-notion-manager/bin/cli.ts +0 -34
- package/skills/skill-onboarding-sequence-builder/bin/cli.ts +0 -34
- package/skills/skill-onsite-ops-checklist/bin/cli.ts +0 -34
- package/skills/skill-outreach-cadence-designer/bin/cli.ts +0 -34
- package/skills/skill-packaging-concept-studio/bin/cli.ts +0 -34
- package/skills/skill-packing-plan-pro/bin/cli.ts +0 -34
- package/skills/skill-parent-teacher-brief/bin/cli.ts +0 -34
- package/skills/skill-partner-kit-assembler/bin/cli.ts +0 -34
- package/skills/skill-payroll-change-prepper/bin/cli.ts +0 -34
- package/skills/skill-persona-based-adwriter/bin/cli.ts +0 -34
- package/skills/skill-persona-generator/bin/cli.ts +0 -34
- package/skills/skill-personal-daily-ops/bin/cli.ts +0 -34
- package/skills/skill-pet-care-scheduler/bin/cli.ts +0 -34
- package/skills/skill-podcast-show-notes/bin/cli.ts +0 -34
- package/skills/skill-presentation-theme-maker/bin/cli.ts +0 -34
- package/skills/skill-press-release-drafter/bin/cli.ts +0 -34
- package/skills/skill-print-collateral-designer/bin/cli.ts +0 -34
- package/skills/skill-procurement-scorecard/bin/cli.ts +0 -34
- package/skills/skill-product-demo-script/bin/cli.ts +0 -34
- package/skills/skill-product-mockup/bin/cli.ts +0 -34
- package/skills/skill-project-retro-companion/bin/cli.ts +0 -34
- package/skills/skill-proposal-redline-advisor/bin/cli.ts +0 -34
- package/skills/skill-regex-tester/bin/cli.ts +0 -34
- package/skills/skill-remove-background/bin/cli.ts +0 -34
- package/skills/skill-risk-disclosure-kit/bin/cli.ts +0 -34
- package/skills/skill-roi-comparison-tool/bin/cli.ts +0 -34
- package/skills/skill-sales-call-recapper/bin/cli.ts +0 -34
- package/skills/skill-salescopy/bin/cli.ts +0 -20
- package/skills/skill-scaffold-project/bin/cli.ts +0 -34
- package/skills/skill-scholarship-tracker/bin/cli.ts +0 -34
- package/skills/skill-scientific-figure-check/bin/cli.ts +0 -34
- package/skills/skill-seating-chart-maker/bin/cli.ts +0 -34
- package/skills/skill-security-audit/bin/cli.ts +0 -34
- package/skills/skill-seo-brief-builder/bin/cli.ts +0 -34
- package/skills/skill-slack-assistant/bin/cli.ts +0 -34
- package/skills/skill-sleep-routine-analyzer/bin/cli.ts +0 -34
- package/skills/skill-social-media-kit/bin/cli.ts +0 -34
- package/skills/skill-split-pdf/bin/cli.ts +0 -34
- package/skills/skill-sponsorship-proposal-lab/bin/cli.ts +0 -34
- package/skills/skill-spreadsheet-cleanroom/bin/cli.ts +0 -34
- package/skills/skill-statistical-test-selector/bin/cli.ts +0 -34
- package/skills/skill-stress-relief-playbook/bin/cli.ts +0 -34
- package/skills/skill-study-guide-builder/bin/cli.ts +0 -34
- package/skills/skill-subscription-spend-watcher/bin/cli.ts +0 -34
- package/skills/skill-subtitle/bin/cli.ts +0 -20
- package/skills/skill-survey-insight-extractor/bin/cli.ts +0 -34
- package/skills/skill-terraform-generator/bin/cli.ts +0 -34
- package/skills/skill-testimonial-graphics/bin/cli.ts +0 -34
- package/skills/skill-timesheet/bin/cli.ts +0 -47
- package/skills/skill-travel-budget-balancer/bin/cli.ts +0 -34
- package/skills/skill-validate-config/bin/cli.ts +0 -34
- package/skills/skill-video-cut-suggester/bin/cli.ts +0 -34
- package/skills/skill-video-downloader/bin/cli.ts +0 -34
- package/skills/skill-video-thumbnail/bin/cli.ts +0 -34
- package/skills/skill-voiceover-casting-assistant/bin/cli.ts +0 -34
- package/skills/skill-watermark/bin/cli.ts +0 -34
- package/skills/skill-webcrawling/bin/cli.ts +0 -21
- package/skills/skill-webinar-script-coach/bin/cli.ts +0 -34
- package/skills/skill-wellness-progress-reporter/bin/cli.ts +0 -34
- package/skills/skill-workout-cycle-planner/bin/cli.ts +0 -34
package/dist/lib/auth-store.d.ts
CHANGED
|
@@ -9,5 +9,5 @@ export declare function getAuthConfig(): AuthConfig | null;
|
|
|
9
9
|
export declare function saveAuthConfig(config: AuthConfig): void;
|
|
10
10
|
export declare function clearAuthConfig(): void;
|
|
11
11
|
export declare function getApiKey(): string | null;
|
|
12
|
-
export declare function
|
|
12
|
+
export declare function normalizeSkillsApiOrigin(apiUrl: string): string;
|
|
13
13
|
export declare function getApiUrl(): string;
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* Values from the project config override global config.
|
|
10
10
|
*/
|
|
11
11
|
export interface SkillsConfig {
|
|
12
|
+
mode?: "local" | "skills.md";
|
|
12
13
|
defaultAgent?: "claude" | "codex" | "gemini" | "pi" | "opencode" | "all";
|
|
13
14
|
defaultScope?: "global" | "project";
|
|
14
15
|
format?: "compact" | "json" | "csv";
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { SkillMeta } from "./registry-types.js";
|
|
2
|
+
import { type PublicSkillPricing } from "./pricing.js";
|
|
3
|
+
export interface CompactSkillDiscovery {
|
|
4
|
+
name: string;
|
|
5
|
+
category: string;
|
|
6
|
+
pricing: PublicSkillPricing;
|
|
7
|
+
}
|
|
8
|
+
export type PublicSkillDiscovery<T extends SkillMeta = SkillMeta> = Omit<T, "description" | "tags"> & {
|
|
9
|
+
description: string;
|
|
10
|
+
tags: string[];
|
|
11
|
+
pricing: PublicSkillPricing;
|
|
12
|
+
};
|
|
13
|
+
export declare function getCompactSkillDiscovery(skill: SkillMeta): CompactSkillDiscovery;
|
|
14
|
+
export declare function getPublicSkillDiscovery<T extends SkillMeta>(skill: T): PublicSkillDiscovery<T>;
|
|
15
|
+
export declare function publicDiscoveryPriceLabel(skill: {
|
|
16
|
+
name: string;
|
|
17
|
+
pricing?: PublicSkillPricing;
|
|
18
|
+
}): string;
|
|
19
|
+
export declare function publicDiscoveryTags(tags: string[]): string[];
|
|
20
|
+
export declare function sanitizePublicDiscoveryText(text: string): string;
|
|
21
|
+
export declare function publicDiscoveryEnvVars(skillName: string, envVars: string[]): string[];
|
|
22
|
+
export declare function publicDiscoveryDependencies(skillName: string, dependencies: Record<string, string>): Record<string, string>;
|
|
23
|
+
export declare function publicDiscoveryDocumentation(skill: SkillMeta, documentation: string | null): string | null;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
export type BillingTier = "free" | "premium";
|
|
2
|
+
export interface SkillPricing {
|
|
3
|
+
slug: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
tier: BillingTier;
|
|
6
|
+
costCents: number;
|
|
7
|
+
providers: string[];
|
|
8
|
+
description: string;
|
|
9
|
+
provider?: string;
|
|
10
|
+
model?: string;
|
|
11
|
+
costMicros?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface PublicSkillPricing {
|
|
14
|
+
tier: BillingTier;
|
|
15
|
+
billingUnit: "run" | "image" | "second" | "character" | "song" | "thousand_tokens" | "article";
|
|
16
|
+
costCents: number;
|
|
17
|
+
formattedCost: string;
|
|
18
|
+
formattedUnitCost?: string;
|
|
19
|
+
unitCount?: number;
|
|
20
|
+
estimated: boolean;
|
|
21
|
+
quoteDependsOnInput: boolean;
|
|
22
|
+
quoteRequired: boolean;
|
|
23
|
+
description: string;
|
|
24
|
+
}
|
|
25
|
+
export type SkillCatalogBillingMode = "free" | "credits" | "subscription" | "metered";
|
|
26
|
+
export interface SkillCatalogBillingFields {
|
|
27
|
+
billingMode: SkillCatalogBillingMode;
|
|
28
|
+
creditsPerExecution: number;
|
|
29
|
+
}
|
|
30
|
+
export type MediaModality = "image" | "video" | "audio" | "music";
|
|
31
|
+
export type MediaProvider = "openai" | "minimax" | "gemini" | "seedance";
|
|
32
|
+
type PriceUnit = "image" | "second" | "character" | "song" | "thousand_tokens";
|
|
33
|
+
interface MediaPrice {
|
|
34
|
+
slug: MediaModality;
|
|
35
|
+
provider: MediaProvider;
|
|
36
|
+
model: string;
|
|
37
|
+
unit: PriceUnit;
|
|
38
|
+
costMicros: number;
|
|
39
|
+
description: string;
|
|
40
|
+
default?: boolean;
|
|
41
|
+
resolution?: string;
|
|
42
|
+
durationSeconds?: number;
|
|
43
|
+
}
|
|
44
|
+
export declare const MUSIC_ALBUM_SLUG = "music-album";
|
|
45
|
+
export declare const MUSIC_ALBUM_SONG_COUNTS: readonly [7, 14, 21];
|
|
46
|
+
export declare const PREMIUM_SKILLS: SkillPricing[];
|
|
47
|
+
export declare const ARTICLE_GENERATION_SLUG = "blog-article";
|
|
48
|
+
export declare const ARTICLE_MAX_COUNT = 12;
|
|
49
|
+
export declare const ARTICLE_COUNT_ERROR = "Count must be an integer between 1 and 12.";
|
|
50
|
+
declare const ARTICLE_TONES: readonly ["professional", "casual", "technical", "friendly"];
|
|
51
|
+
declare const ARTICLE_LENGTHS: readonly ["short", "medium", "long"];
|
|
52
|
+
export type ArticleTone = typeof ARTICLE_TONES[number];
|
|
53
|
+
export type ArticleLength = typeof ARTICLE_LENGTHS[number];
|
|
54
|
+
export interface BlogArticleRunOptions {
|
|
55
|
+
topic?: string;
|
|
56
|
+
audience?: string;
|
|
57
|
+
tone: ArticleTone;
|
|
58
|
+
length: ArticleLength;
|
|
59
|
+
seo: boolean;
|
|
60
|
+
outline?: string;
|
|
61
|
+
count: number;
|
|
62
|
+
}
|
|
63
|
+
export type BlogArticleValidationResult = {
|
|
64
|
+
ok: true;
|
|
65
|
+
options: BlogArticleRunOptions;
|
|
66
|
+
input: Record<string, unknown>;
|
|
67
|
+
errors: [];
|
|
68
|
+
} | {
|
|
69
|
+
ok: false;
|
|
70
|
+
input: Record<string, unknown>;
|
|
71
|
+
errors: string[];
|
|
72
|
+
};
|
|
73
|
+
export declare const MEDIA_GENERATION_PRICES: MediaPrice[];
|
|
74
|
+
export declare function getSkillPricing(slug: string): SkillPricing | null;
|
|
75
|
+
export declare function isPremiumSkill(slug: string): boolean;
|
|
76
|
+
export declare function getSkillCostCents(slug: string): number;
|
|
77
|
+
export declare function getSkillRunPricing(slug: string, input?: unknown, args?: string[]): SkillPricing | null;
|
|
78
|
+
export declare function validateBlogArticleRunOptions(input?: unknown, args?: string[], validation?: {
|
|
79
|
+
requireTopic?: boolean;
|
|
80
|
+
}): BlogArticleValidationResult;
|
|
81
|
+
export declare function getSkillRunCostCents(slug: string, input?: unknown, args?: string[]): number;
|
|
82
|
+
export declare function getPublicSkillPricing(slug: string, input?: unknown, args?: string[]): PublicSkillPricing;
|
|
83
|
+
export declare function getSkillCatalogBillingFields(slug: string, input?: unknown, args?: string[]): SkillCatalogBillingFields;
|
|
84
|
+
export declare function formatPublicPricing(slug: string, input?: unknown, args?: string[]): string;
|
|
85
|
+
export declare function isMediaGenerationSkill(slug: string): boolean;
|
|
86
|
+
export declare function getMediaProviders(slug: MediaModality): string[];
|
|
87
|
+
export declare function formatCost(cents: number): string;
|
|
88
|
+
export declare function getAllPremiumSlugs(): string[];
|
|
89
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type RemoteSkillRunContract } from "./remote-run-contract.js";
|
|
2
|
+
export declare class RemoteSkillsClient {
|
|
3
|
+
private apiUrl;
|
|
4
|
+
private apiKey;
|
|
5
|
+
constructor(apiKey: string, apiUrl?: string);
|
|
6
|
+
private request;
|
|
7
|
+
listSkills(): Promise<any[]>;
|
|
8
|
+
getSkillMd(slug: string): Promise<string | null>;
|
|
9
|
+
getSkill(slug: string): Promise<any | null>;
|
|
10
|
+
quoteSkill(slug: string, input?: Record<string, unknown>, args?: string[]): Promise<any>;
|
|
11
|
+
submitRun(slug: string, input?: Record<string, unknown>, args?: string[]): Promise<RemoteSkillRunContract>;
|
|
12
|
+
getRun(runId: string): Promise<RemoteSkillRunContract | null>;
|
|
13
|
+
getRunLogs(runId: string): Promise<any[]>;
|
|
14
|
+
listRuns(limit?: number): Promise<any[]>;
|
|
15
|
+
getRunArtifacts(runId: string): Promise<any[]>;
|
|
16
|
+
downloadRunArtifact(runId: string, artifactId: string): Promise<Response>;
|
|
17
|
+
}
|
|
18
|
+
export declare function createRemoteSkillsClient(): RemoteSkillsClient | null;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { PublicSkillPricing } from "./pricing";
|
|
2
|
+
export declare const REMOTE_SKILL_RUN_CONTRACT_VERSION: 1;
|
|
3
|
+
export interface RemoteSkillRunContract {
|
|
4
|
+
contractVersion: typeof REMOTE_SKILL_RUN_CONTRACT_VERSION;
|
|
5
|
+
id?: string;
|
|
6
|
+
skill?: string;
|
|
7
|
+
requestedSlug?: string;
|
|
8
|
+
status?: string;
|
|
9
|
+
exitCode?: number;
|
|
10
|
+
correlationId?: string;
|
|
11
|
+
costCents?: number;
|
|
12
|
+
cost?: string;
|
|
13
|
+
pricing?: PublicSkillPricing;
|
|
14
|
+
createdAt?: string;
|
|
15
|
+
startedAt?: string;
|
|
16
|
+
completedAt?: string;
|
|
17
|
+
durationMs?: number;
|
|
18
|
+
outputType?: string;
|
|
19
|
+
outputPreview?: unknown;
|
|
20
|
+
errorCode?: string;
|
|
21
|
+
errorMessage?: string;
|
|
22
|
+
creditsUsed?: number;
|
|
23
|
+
error?: string;
|
|
24
|
+
code?: string;
|
|
25
|
+
details?: unknown;
|
|
26
|
+
balance?: string;
|
|
27
|
+
balanceCents?: number;
|
|
28
|
+
}
|
|
29
|
+
export declare function normalizeRemoteSkillRunContract(payload: unknown, fallbackSkill?: string): RemoteSkillRunContract;
|
package/dist/mcp/http.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createServer, type IncomingMessage, type ServerResponse } from "node:http";
|
|
2
|
-
export declare const MCP_HTTP_DEFAULT_PORT =
|
|
2
|
+
export declare const MCP_HTTP_DEFAULT_PORT = 8836;
|
|
3
3
|
export declare const MCP_HTTP_SERVICE_NAME = "skills";
|
|
4
4
|
export declare function isMcpHttpMode(argv?: string[]): boolean;
|
|
5
5
|
export declare function isMcpStdioMode(argv?: string[]): boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hasna/skills",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.31",
|
|
4
4
|
"description": "Skills library for AI coding agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -36,17 +36,6 @@
|
|
|
36
36
|
"dev:watch": "bun --watch run ./src/cli/index.tsx",
|
|
37
37
|
"dev:mcp": "bun --watch run ./src/mcp/index.ts",
|
|
38
38
|
"typecheck": "tsc --noEmit",
|
|
39
|
-
"db:migrate:preview": "bun run scripts/apply_database_migrations.ts",
|
|
40
|
-
"aws:bootstrap:ecs": "bash scripts/bootstrap_ecs_foundation.sh",
|
|
41
|
-
"aws:bootstrap:s3": "bash scripts/bootstrap_s3_buckets.sh",
|
|
42
|
-
"aws:bootstrap:secrets": "bash scripts/bootstrap_secrets.sh",
|
|
43
|
-
"aws:bootstrap:preview-edge": "bash scripts/bootstrap_preview_edge.sh",
|
|
44
|
-
"aws:bootstrap:preview-stripe": "bash scripts/preview_bootstrap_stripe.sh",
|
|
45
|
-
"aws:verify:preview-stripe": "bash scripts/preview_verify_stripe.sh",
|
|
46
|
-
"aws:bootstrap:production-edge": "bash scripts/bootstrap_production_edge.sh",
|
|
47
|
-
"aws:bootstrap:production-stripe": "bash scripts/production_bootstrap_stripe.sh",
|
|
48
|
-
"aws:production:readiness": "bash scripts/production_readiness.sh",
|
|
49
|
-
"upstream:check": "bash scripts/check_upstream_sync.sh",
|
|
50
39
|
"prepublishOnly": "bun run build",
|
|
51
40
|
"postinstall": "mkdir -p $HOME/.hasna/skills/custom 2>/dev/null || true"
|
|
52
41
|
},
|
|
@@ -70,11 +59,10 @@
|
|
|
70
59
|
"license": "Apache-2.0",
|
|
71
60
|
"devDependencies": {
|
|
72
61
|
"@types/bun": "latest",
|
|
62
|
+
"@types/react": "^18.2.0",
|
|
73
63
|
"typescript": "^5"
|
|
74
64
|
},
|
|
75
65
|
"dependencies": {
|
|
76
|
-
"@hasna/cloud": "^0.1.24",
|
|
77
|
-
"@hasna/skills": "0.1.27",
|
|
78
66
|
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
79
67
|
"chalk": "^5.3.0",
|
|
80
68
|
"commander": "^12.1.0",
|
|
@@ -82,6 +70,7 @@
|
|
|
82
70
|
"ink-select-input": "^6.0.0",
|
|
83
71
|
"ink-spinner": "^5.0.0",
|
|
84
72
|
"ink-text-input": "^6.0.0",
|
|
73
|
+
"react": "^18.2.0",
|
|
85
74
|
"zod": "^4.3.6"
|
|
86
75
|
},
|
|
87
76
|
"engines": {
|
|
@@ -53,7 +53,7 @@ const PATTERNS = [
|
|
|
53
53
|
{ name: "Eval Usage", regex: /eval\(/, severity: "MEDIUM" },
|
|
54
54
|
{
|
|
55
55
|
name: "Insecure HTTP",
|
|
56
|
-
regex: /http:\/\/(?!localhost(?:[:/$]|$)|127\.0\.0\.1(?:[:/$]|$)|0\.0\.0\.0(?:[:/$]|$))/,
|
|
56
|
+
regex: /http:\/\/(?!localhost(?:[:/$]|$)|127\.0\.0\.1(?:[:/$]|$)|0\.0\.0\.0(?:[:/$]|$)|\$\{)/,
|
|
57
57
|
severity: "LOW",
|
|
58
58
|
},
|
|
59
59
|
];
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import { Command } from "commander";
|
|
4
|
-
import { homedir } from "os";
|
|
5
|
-
import { join } from "path";
|
|
6
|
-
|
|
7
|
-
function getDataDir(): string {
|
|
8
|
-
return process.env.DATA_DIR || join(homedir(), ".skill", "skill-academic-journal-matcher");
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const program = new Command();
|
|
12
|
-
|
|
13
|
-
program
|
|
14
|
-
.name("skill-academic-journal-matcher")
|
|
15
|
-
.description("Academic Journal Matcher skill")
|
|
16
|
-
.version("0.1.0");
|
|
17
|
-
|
|
18
|
-
program
|
|
19
|
-
.command("run")
|
|
20
|
-
.description("Run the skill")
|
|
21
|
-
.option("-o, --output <path>", "Output directory", join(getDataDir(), "output"))
|
|
22
|
-
.allowUnknownOption(true)
|
|
23
|
-
.action(async (options, command) => {
|
|
24
|
-
try {
|
|
25
|
-
const args = command.args;
|
|
26
|
-
process.env.DATA_DIR = process.env.DATA_DIR || getDataDir();
|
|
27
|
-
await import("../src/index.js");
|
|
28
|
-
} catch (err) {
|
|
29
|
-
console.error(`Error: ${err instanceof Error ? err.message : err}`);
|
|
30
|
-
process.exit(1);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
program.parse();
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import { Command } from "commander";
|
|
4
|
-
import { homedir } from "os";
|
|
5
|
-
import { join } from "path";
|
|
6
|
-
|
|
7
|
-
function getDataDir(): string {
|
|
8
|
-
return process.env.DATA_DIR || join(homedir(), ".skill", "skill-action-item-router");
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const program = new Command();
|
|
12
|
-
|
|
13
|
-
program
|
|
14
|
-
.name("skill-action-item-router")
|
|
15
|
-
.description("Action Item Router skill")
|
|
16
|
-
.version("0.1.0");
|
|
17
|
-
|
|
18
|
-
program
|
|
19
|
-
.command("run")
|
|
20
|
-
.description("Run the skill")
|
|
21
|
-
.option("-o, --output <path>", "Output directory", join(getDataDir(), "output"))
|
|
22
|
-
.allowUnknownOption(true)
|
|
23
|
-
.action(async (options, command) => {
|
|
24
|
-
try {
|
|
25
|
-
const args = command.args;
|
|
26
|
-
process.env.DATA_DIR = process.env.DATA_DIR || getDataDir();
|
|
27
|
-
await import("../src/index.js");
|
|
28
|
-
} catch (err) {
|
|
29
|
-
console.error(`Error: ${err instanceof Error ? err.message : err}`);
|
|
30
|
-
process.exit(1);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
program.parse();
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import { Command } from "commander";
|
|
4
|
-
import { homedir } from "os";
|
|
5
|
-
import { join } from "path";
|
|
6
|
-
|
|
7
|
-
function getDataDir(): string {
|
|
8
|
-
return process.env.DATA_DIR || join(homedir(), ".skill", "skill-ad-creative-generator");
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const program = new Command();
|
|
12
|
-
|
|
13
|
-
program
|
|
14
|
-
.name("skill-ad-creative-generator")
|
|
15
|
-
.description("Ad Creative Generator skill")
|
|
16
|
-
.version("0.1.0");
|
|
17
|
-
|
|
18
|
-
program
|
|
19
|
-
.command("run")
|
|
20
|
-
.description("Run the skill")
|
|
21
|
-
.option("-o, --output <path>", "Output directory", join(getDataDir(), "output"))
|
|
22
|
-
.allowUnknownOption(true)
|
|
23
|
-
.action(async (options, command) => {
|
|
24
|
-
try {
|
|
25
|
-
const args = command.args;
|
|
26
|
-
process.env.DATA_DIR = process.env.DATA_DIR || getDataDir();
|
|
27
|
-
await import("../src/index.js");
|
|
28
|
-
} catch (err) {
|
|
29
|
-
console.error(`Error: ${err instanceof Error ? err.message : err}`);
|
|
30
|
-
process.exit(1);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
program.parse();
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import { Command } from "commander";
|
|
4
|
-
import { homedir } from "os";
|
|
5
|
-
import { join } from "path";
|
|
6
|
-
|
|
7
|
-
function getDataDir(): string {
|
|
8
|
-
return process.env.DATA_DIR || join(homedir(), ".skill", "skill-advanced-math");
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const program = new Command();
|
|
12
|
-
|
|
13
|
-
program
|
|
14
|
-
.name("skill-advanced-math")
|
|
15
|
-
.description("Advanced Math skill")
|
|
16
|
-
.version("0.1.0");
|
|
17
|
-
|
|
18
|
-
program
|
|
19
|
-
.command("run")
|
|
20
|
-
.description("Run the skill")
|
|
21
|
-
.option("-o, --output <path>", "Output directory", join(getDataDir(), "output"))
|
|
22
|
-
.allowUnknownOption(true)
|
|
23
|
-
.action(async (options, command) => {
|
|
24
|
-
try {
|
|
25
|
-
const args = command.args;
|
|
26
|
-
process.env.DATA_DIR = process.env.DATA_DIR || getDataDir();
|
|
27
|
-
await import("../src/index.js");
|
|
28
|
-
} catch (err) {
|
|
29
|
-
console.error(`Error: ${err instanceof Error ? err.message : err}`);
|
|
30
|
-
process.exit(1);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
program.parse();
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
import { Command } from "commander";
|
|
3
|
-
|
|
4
|
-
const program = new Command();
|
|
5
|
-
|
|
6
|
-
program
|
|
7
|
-
.name("skill-analyze-data")
|
|
8
|
-
.description("Data science insights for CSV and JSON")
|
|
9
|
-
.version("0.1.0");
|
|
10
|
-
|
|
11
|
-
program
|
|
12
|
-
.command("run", { isDefault: true })
|
|
13
|
-
.description("Run the skill")
|
|
14
|
-
.allowUnknownOption(true)
|
|
15
|
-
.action(async () => {
|
|
16
|
-
await import("../src/index.js");
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
program.parse();
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import { Command } from "commander";
|
|
4
|
-
import { homedir } from "os";
|
|
5
|
-
import { join } from "path";
|
|
6
|
-
|
|
7
|
-
function getDataDir(): string {
|
|
8
|
-
return process.env.DATA_DIR || join(homedir(), ".skill", "skill-anomaly-investigator");
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const program = new Command();
|
|
12
|
-
|
|
13
|
-
program
|
|
14
|
-
.name("skill-anomaly-investigator")
|
|
15
|
-
.description("Anomaly Investigator skill")
|
|
16
|
-
.version("0.1.0");
|
|
17
|
-
|
|
18
|
-
program
|
|
19
|
-
.command("run")
|
|
20
|
-
.description("Run the skill")
|
|
21
|
-
.option("-o, --output <path>", "Output directory", join(getDataDir(), "output"))
|
|
22
|
-
.allowUnknownOption(true)
|
|
23
|
-
.action(async (options, command) => {
|
|
24
|
-
try {
|
|
25
|
-
const args = command.args;
|
|
26
|
-
process.env.DATA_DIR = process.env.DATA_DIR || getDataDir();
|
|
27
|
-
await import("../src/index.js");
|
|
28
|
-
} catch (err) {
|
|
29
|
-
console.error(`Error: ${err instanceof Error ? err.message : err}`);
|
|
30
|
-
process.exit(1);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
program.parse();
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import { Command } from "commander";
|
|
4
|
-
import { homedir } from "os";
|
|
5
|
-
import { join } from "path";
|
|
6
|
-
|
|
7
|
-
function getDataDir(): string {
|
|
8
|
-
return process.env.DATA_DIR || join(homedir(), ".skill", "skill-api-test-suite");
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const program = new Command();
|
|
12
|
-
|
|
13
|
-
program
|
|
14
|
-
.name("skill-api-test-suite")
|
|
15
|
-
.description("Api Test Suite skill")
|
|
16
|
-
.version("0.1.0");
|
|
17
|
-
|
|
18
|
-
program
|
|
19
|
-
.command("run")
|
|
20
|
-
.description("Run the skill")
|
|
21
|
-
.option("-o, --output <path>", "Output directory", join(getDataDir(), "output"))
|
|
22
|
-
.allowUnknownOption(true)
|
|
23
|
-
.action(async (options, command) => {
|
|
24
|
-
try {
|
|
25
|
-
const args = command.args;
|
|
26
|
-
process.env.DATA_DIR = process.env.DATA_DIR || getDataDir();
|
|
27
|
-
await import("../src/index.js");
|
|
28
|
-
} catch (err) {
|
|
29
|
-
console.error(`Error: ${err instanceof Error ? err.message : err}`);
|
|
30
|
-
process.exit(1);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
program.parse();
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import { Command } from 'commander';
|
|
4
|
-
import { add } from '../src/commands/add.js';
|
|
5
|
-
import { query } from '../src/commands/query.js';
|
|
6
|
-
import { list } from '../src/commands/list.js';
|
|
7
|
-
import { sync } from '../src/commands/sync.js';
|
|
8
|
-
import { remove } from '../src/commands/remove.js';
|
|
9
|
-
import { endpoints } from '../src/commands/endpoints.js';
|
|
10
|
-
|
|
11
|
-
const program = new Command();
|
|
12
|
-
|
|
13
|
-
program
|
|
14
|
-
.name('service-apidocs')
|
|
15
|
-
.description('Agentic web crawler for API documentation indexing and semantic search')
|
|
16
|
-
.version('0.3.0');
|
|
17
|
-
|
|
18
|
-
// Add command
|
|
19
|
-
program
|
|
20
|
-
.command('add <website-url>')
|
|
21
|
-
.description('Add documentation from a website URL')
|
|
22
|
-
.option('-n, --name <name>', 'Custom library name')
|
|
23
|
-
.option('-m, --max-pages <number>', 'Maximum pages to crawl', (v) => parseInt(v, 10))
|
|
24
|
-
.action(async (websiteUrl: string, options) => {
|
|
25
|
-
await add(websiteUrl, options);
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
// Query command
|
|
29
|
-
program
|
|
30
|
-
.command('query <library> <question>')
|
|
31
|
-
.description('Query documentation semantically')
|
|
32
|
-
.option('--tokens <number>', 'Maximum tokens in response', (v) => parseInt(v, 10))
|
|
33
|
-
.option('--top-k <number>', 'Number of results to retrieve', (v) => parseInt(v, 10))
|
|
34
|
-
.option('--json', 'Output as JSON')
|
|
35
|
-
.action(async (library: string, question: string, options) => {
|
|
36
|
-
await query(library, question, {
|
|
37
|
-
library,
|
|
38
|
-
question,
|
|
39
|
-
tokens: options.tokens,
|
|
40
|
-
topK: options.topK,
|
|
41
|
-
json: options.json,
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
// List command
|
|
46
|
-
program
|
|
47
|
-
.command('list')
|
|
48
|
-
.description('List all indexed libraries')
|
|
49
|
-
.action(async () => {
|
|
50
|
-
await list();
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
// Sync command
|
|
54
|
-
program
|
|
55
|
-
.command('sync [library]')
|
|
56
|
-
.description('Re-crawl and sync a library\'s documentation')
|
|
57
|
-
.option('--all', 'Sync all indexed libraries')
|
|
58
|
-
.option('-m, --max-pages <number>', 'Maximum pages to crawl', (v) => parseInt(v, 10))
|
|
59
|
-
.action(async (library: string | undefined, options) => {
|
|
60
|
-
await sync(library, options);
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
// Remove command
|
|
64
|
-
program
|
|
65
|
-
.command('remove <library>')
|
|
66
|
-
.description('Remove a library from the index')
|
|
67
|
-
.action(async (library: string) => {
|
|
68
|
-
await remove(library);
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
// Endpoints command
|
|
72
|
-
program
|
|
73
|
-
.command('endpoints <library>')
|
|
74
|
-
.description('List API endpoints from indexed documentation')
|
|
75
|
-
.option('--json', 'Output as JSON')
|
|
76
|
-
.option('--group-by <type>', 'Group by: resource (default) or method', 'resource')
|
|
77
|
-
.option('--filter <method>', 'Filter by HTTP method (GET, POST, PUT, DELETE, etc.)')
|
|
78
|
-
.action(async (library: string, options) => {
|
|
79
|
-
await endpoints(library, {
|
|
80
|
-
json: options.json,
|
|
81
|
-
groupBy: options.groupBy as 'resource' | 'method',
|
|
82
|
-
filter: options.filter,
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
// Parse and run
|
|
87
|
-
program.parse();
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
import { Command } from "commander";
|
|
3
|
-
const program = new Command();
|
|
4
|
-
program.name("skill-audio-cleanup-lab").description("Professional audio cleanup recipes").version("0.1.0");
|
|
5
|
-
program.command("run", { isDefault: true }).description("Run the skill").allowUnknownOption(true).action(async () => { await import("../src/index.js"); });
|
|
6
|
-
program.parse();
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import { Command } from "commander";
|
|
4
|
-
import { homedir } from "os";
|
|
5
|
-
import { join } from "path";
|
|
6
|
-
|
|
7
|
-
function getDataDir(): string {
|
|
8
|
-
return process.env.DATA_DIR || join(homedir(), ".skill", "skill-audiobook-chapter-proofer");
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const program = new Command();
|
|
12
|
-
|
|
13
|
-
program
|
|
14
|
-
.name("skill-audiobook-chapter-proofer")
|
|
15
|
-
.description("Audiobook Chapter Proofer skill")
|
|
16
|
-
.version("0.1.0");
|
|
17
|
-
|
|
18
|
-
program
|
|
19
|
-
.command("run")
|
|
20
|
-
.description("Run the skill")
|
|
21
|
-
.option("-o, --output <path>", "Output directory", join(getDataDir(), "output"))
|
|
22
|
-
.allowUnknownOption(true)
|
|
23
|
-
.action(async (options, command) => {
|
|
24
|
-
try {
|
|
25
|
-
const args = command.args;
|
|
26
|
-
process.env.DATA_DIR = process.env.DATA_DIR || getDataDir();
|
|
27
|
-
await import("../src/index.js");
|
|
28
|
-
} catch (err) {
|
|
29
|
-
console.error(`Error: ${err instanceof Error ? err.message : err}`);
|
|
30
|
-
process.exit(1);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
program.parse();
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import { Command } from "commander";
|
|
4
|
-
import { homedir } from "os";
|
|
5
|
-
import { join } from "path";
|
|
6
|
-
|
|
7
|
-
function getDataDir(): string {
|
|
8
|
-
return process.env.DATA_DIR || join(homedir(), ".skill", "skill-banner-ad-suite");
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const program = new Command();
|
|
12
|
-
|
|
13
|
-
program
|
|
14
|
-
.name("skill-banner-ad-suite")
|
|
15
|
-
.description("Banner Ad Suite skill")
|
|
16
|
-
.version("0.1.0");
|
|
17
|
-
|
|
18
|
-
program
|
|
19
|
-
.command("run")
|
|
20
|
-
.description("Run the skill")
|
|
21
|
-
.option("-o, --output <path>", "Output directory", join(getDataDir(), "output"))
|
|
22
|
-
.allowUnknownOption(true)
|
|
23
|
-
.action(async (options, command) => {
|
|
24
|
-
try {
|
|
25
|
-
const args = command.args;
|
|
26
|
-
process.env.DATA_DIR = process.env.DATA_DIR || getDataDir();
|
|
27
|
-
await import("../src/index.js");
|
|
28
|
-
} catch (err) {
|
|
29
|
-
console.error(`Error: ${err instanceof Error ? err.message : err}`);
|
|
30
|
-
process.exit(1);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
program.parse();
|