siteskills 1.0.0

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.
Files changed (69) hide show
  1. package/dist/commands/info.d.ts +2 -0
  2. package/dist/commands/info.d.ts.map +1 -0
  3. package/dist/commands/info.js +59 -0
  4. package/dist/commands/info.js.map +1 -0
  5. package/dist/commands/init.d.ts +2 -0
  6. package/dist/commands/init.d.ts.map +1 -0
  7. package/dist/commands/init.js +125 -0
  8. package/dist/commands/init.js.map +1 -0
  9. package/dist/commands/install.d.ts +4 -0
  10. package/dist/commands/install.d.ts.map +1 -0
  11. package/dist/commands/install.js +75 -0
  12. package/dist/commands/install.js.map +1 -0
  13. package/dist/commands/list.d.ts +2 -0
  14. package/dist/commands/list.d.ts.map +1 -0
  15. package/dist/commands/list.js +59 -0
  16. package/dist/commands/list.js.map +1 -0
  17. package/dist/commands/login.d.ts +2 -0
  18. package/dist/commands/login.d.ts.map +1 -0
  19. package/dist/commands/login.js +62 -0
  20. package/dist/commands/login.js.map +1 -0
  21. package/dist/commands/logout.d.ts +2 -0
  22. package/dist/commands/logout.d.ts.map +1 -0
  23. package/dist/commands/logout.js +12 -0
  24. package/dist/commands/logout.js.map +1 -0
  25. package/dist/commands/publish.d.ts +4 -0
  26. package/dist/commands/publish.d.ts.map +1 -0
  27. package/dist/commands/publish.js +87 -0
  28. package/dist/commands/publish.js.map +1 -0
  29. package/dist/commands/search.d.ts +4 -0
  30. package/dist/commands/search.d.ts.map +1 -0
  31. package/dist/commands/search.js +48 -0
  32. package/dist/commands/search.js.map +1 -0
  33. package/dist/commands/uninstall.d.ts +2 -0
  34. package/dist/commands/uninstall.d.ts.map +1 -0
  35. package/dist/commands/uninstall.js +44 -0
  36. package/dist/commands/uninstall.js.map +1 -0
  37. package/dist/commands/unpublish.d.ts +2 -0
  38. package/dist/commands/unpublish.d.ts.map +1 -0
  39. package/dist/commands/unpublish.js +56 -0
  40. package/dist/commands/unpublish.js.map +1 -0
  41. package/dist/commands/update.d.ts +2 -0
  42. package/dist/commands/update.d.ts.map +1 -0
  43. package/dist/commands/update.js +103 -0
  44. package/dist/commands/update.js.map +1 -0
  45. package/dist/commands/validate.d.ts +2 -0
  46. package/dist/commands/validate.d.ts.map +1 -0
  47. package/dist/commands/validate.js +27 -0
  48. package/dist/commands/validate.js.map +1 -0
  49. package/dist/commands/whoami.d.ts +2 -0
  50. package/dist/commands/whoami.d.ts.map +1 -0
  51. package/dist/commands/whoami.js +45 -0
  52. package/dist/commands/whoami.js.map +1 -0
  53. package/dist/index.d.ts +3 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +120 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/lib/api.d.ts +54 -0
  58. package/dist/lib/api.d.ts.map +1 -0
  59. package/dist/lib/api.js +148 -0
  60. package/dist/lib/api.js.map +1 -0
  61. package/dist/lib/config.d.ts +11 -0
  62. package/dist/lib/config.d.ts.map +1 -0
  63. package/dist/lib/config.js +54 -0
  64. package/dist/lib/config.js.map +1 -0
  65. package/dist/lib/manifest.d.ts +29 -0
  66. package/dist/lib/manifest.d.ts.map +1 -0
  67. package/dist/lib/manifest.js +141 -0
  68. package/dist/lib/manifest.js.map +1 -0
  69. package/package.json +52 -0
@@ -0,0 +1,2 @@
1
+ export declare function infoCommand(slug: string): Promise<void>;
2
+ //# sourceMappingURL=info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiE7D"}
@@ -0,0 +1,59 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ import { requireAuth } from "../lib/config.js";
4
+ import { getSkillInfo } from "../lib/api.js";
5
+ export async function infoCommand(slug) {
6
+ if (!slug || slug.trim().length === 0) {
7
+ console.error(chalk.red("Please provide a skill slug. Usage: siteskills info <slug>"));
8
+ process.exit(1);
9
+ }
10
+ let apiKey;
11
+ try {
12
+ apiKey = requireAuth();
13
+ }
14
+ catch (err) {
15
+ console.error(chalk.red(err.message));
16
+ process.exit(1);
17
+ }
18
+ const spinner = ora(`Fetching info for "${slug}"...`).start();
19
+ try {
20
+ const response = await getSkillInfo(apiKey, slug);
21
+ if (!response.ok) {
22
+ spinner.fail(chalk.red(`Failed to fetch info for "${slug}".`));
23
+ const errorData = response.data;
24
+ if (response.status === 404) {
25
+ console.error(chalk.red(` Skill "${slug}" not found.`));
26
+ }
27
+ else {
28
+ console.error(chalk.red(` Error: ${errorData.message || `HTTP ${response.status}`}`));
29
+ }
30
+ process.exit(1);
31
+ }
32
+ spinner.stop();
33
+ const skill = response.data.skill;
34
+ console.log(chalk.bold(`\n${skill.name}\n`));
35
+ console.log(` ${chalk.dim("Slug:")} ${skill.slug}`);
36
+ console.log(` ${chalk.dim("Version:")} ${skill.version}`);
37
+ console.log(` ${chalk.dim("Status:")} ${skill.status === "published" ? chalk.green(skill.status) : chalk.yellow(skill.status)}`);
38
+ console.log(` ${chalk.dim("Author:")} ${skill.author || "N/A"}`);
39
+ console.log(` ${chalk.dim("Description:")} ${skill.description || "N/A"}`);
40
+ if (skill.downloads !== undefined) {
41
+ console.log(` ${chalk.dim("Downloads:")} ${skill.downloads}`);
42
+ }
43
+ console.log(` ${chalk.dim("Created:")} ${skill.createdAt ? new Date(skill.createdAt).toLocaleDateString() : "N/A"}`);
44
+ console.log(` ${chalk.dim("Updated:")} ${skill.updatedAt ? new Date(skill.updatedAt).toLocaleDateString() : "N/A"}`);
45
+ if (skill.versions && skill.versions.length > 0) {
46
+ console.log(chalk.dim("\n Version History:"));
47
+ for (const v of skill.versions) {
48
+ console.log(chalk.dim(` - ${v.version} (${new Date(v.createdAt).toLocaleDateString()})`));
49
+ }
50
+ }
51
+ console.log();
52
+ }
53
+ catch (err) {
54
+ spinner.fail(chalk.red(`Failed to fetch info for "${slug}".`));
55
+ console.error(chalk.red(` Error: ${err.message}`));
56
+ process.exit(1);
57
+ }
58
+ }
59
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function initCommand(): Promise<void>;
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAMA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAkJjD"}
@@ -0,0 +1,125 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import chalk from "chalk";
4
+ import inquirer from "inquirer";
5
+ import { createManifestTemplate } from "../lib/manifest.js";
6
+ export async function initCommand() {
7
+ const cwd = process.cwd();
8
+ const manifestPath = path.join(cwd, "manifest.json");
9
+ console.log(chalk.bold("\nInitialize a new SiteSkills project\n"));
10
+ // Check if manifest already exists
11
+ if (fs.existsSync(manifestPath)) {
12
+ const { overwrite } = await inquirer.prompt([
13
+ {
14
+ type: "confirm",
15
+ name: "overwrite",
16
+ message: "A manifest.json already exists in this directory. Do you want to overwrite it?",
17
+ default: false,
18
+ },
19
+ ]);
20
+ if (!overwrite) {
21
+ console.log(chalk.yellow("Initialization cancelled."));
22
+ return;
23
+ }
24
+ }
25
+ // Gather project info
26
+ const answers = await inquirer.prompt([
27
+ {
28
+ type: "input",
29
+ name: "name",
30
+ message: "Skill name:",
31
+ default: path.basename(cwd),
32
+ validate: (input) => input.trim().length > 0 || "Name cannot be empty.",
33
+ },
34
+ {
35
+ type: "input",
36
+ name: "slug",
37
+ message: "Skill slug (lowercase, hyphens only):",
38
+ default: (prev) => prev.name
39
+ .toLowerCase()
40
+ .replace(/[^a-z0-9]+/g, "-")
41
+ .replace(/^-|-$/g, ""),
42
+ validate: (input) => {
43
+ if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(input)) {
44
+ return "Slug must be lowercase alphanumeric with hyphens (e.g., my-skill).";
45
+ }
46
+ return true;
47
+ },
48
+ },
49
+ {
50
+ type: "input",
51
+ name: "description",
52
+ message: "Description:",
53
+ default: "A SiteSkills skill",
54
+ },
55
+ {
56
+ type: "input",
57
+ name: "author",
58
+ message: "Author:",
59
+ default: "",
60
+ },
61
+ {
62
+ type: "input",
63
+ name: "version",
64
+ message: "Version:",
65
+ default: "1.0.0",
66
+ validate: (input) => {
67
+ if (!/^\d+\.\d+\.\d+(?:-[\w.]+)?$/.test(input)) {
68
+ return "Version must follow semver format (e.g., 1.0.0).";
69
+ }
70
+ return true;
71
+ },
72
+ },
73
+ ]);
74
+ // Build manifest
75
+ const manifest = createManifestTemplate();
76
+ manifest.name = answers.name;
77
+ manifest.slug = answers.slug;
78
+ manifest.description = answers.description;
79
+ manifest.author = answers.author;
80
+ manifest.version = answers.version;
81
+ // Write manifest
82
+ fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + "\n", "utf-8");
83
+ // Create folder structure
84
+ const dirs = ["src", "assets", "dist"];
85
+ for (const dir of dirs) {
86
+ const dirPath = path.join(cwd, dir);
87
+ if (!fs.existsSync(dirPath)) {
88
+ fs.mkdirSync(dirPath, { recursive: true });
89
+ }
90
+ }
91
+ // Create index.js entry point
92
+ const indexPath = path.join(cwd, "index.js");
93
+ if (!fs.existsSync(indexPath)) {
94
+ fs.writeFileSync(indexPath, `// ${answers.name} - SiteSkills Skill
95
+ // Main entry point
96
+
97
+ export function handlePageLoad(context) {
98
+ console.log("Skill loaded:", context);
99
+ }
100
+ `, "utf-8");
101
+ }
102
+ // Create .gitignore
103
+ const gitignorePath = path.join(cwd, ".gitignore");
104
+ if (!fs.existsSync(gitignorePath)) {
105
+ fs.writeFileSync(gitignorePath, `node_modules/
106
+ dist/
107
+ *.zip
108
+ .siteskills/
109
+ `, "utf-8");
110
+ }
111
+ console.log(chalk.green("\nProject initialized successfully!\n"));
112
+ console.log(chalk.dim("Created:"));
113
+ console.log(chalk.dim(" manifest.json"));
114
+ console.log(chalk.dim(" index.js"));
115
+ console.log(chalk.dim(" src/"));
116
+ console.log(chalk.dim(" assets/"));
117
+ console.log(chalk.dim(" dist/"));
118
+ console.log(chalk.dim(" .gitignore"));
119
+ console.log(chalk.dim("\nNext steps:"));
120
+ console.log(chalk.dim(" 1. Edit manifest.json to configure your skill"));
121
+ console.log(chalk.dim(" 2. Implement your skill logic in index.js"));
122
+ console.log(chalk.dim(" 3. Run `siteskills validate` to check your project"));
123
+ console.log(chalk.dim(" 4. Run `siteskills publish` to upload to SiteSkills"));
124
+ }
125
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function installCommand(slug: string, options: {
2
+ dir?: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AA+BA,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACxB,OAAO,CAAC,IAAI,CAAC,CAuEf"}
@@ -0,0 +1,75 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import os from "node:os";
4
+ import chalk from "chalk";
5
+ import ora from "ora";
6
+ import { getApiUrl } from "../lib/config.js";
7
+ /** Detect where skills should be installed based on platform. */
8
+ function getSkillsDir() {
9
+ // Allow override via env var
10
+ const envDir = process.env.SITESKILLS_DIR;
11
+ if (envDir)
12
+ return envDir;
13
+ const home = os.homedir();
14
+ // Check for Claude Code skills directory
15
+ const claudeDir = path.join(home, ".claude", "skills");
16
+ if (fs.existsSync(path.join(home, ".claude"))) {
17
+ return claudeDir;
18
+ }
19
+ // Check for OpenClaw
20
+ const openclawDir = path.join(home, ".openclaw", "skills");
21
+ if (fs.existsSync(path.join(home, ".openclaw"))) {
22
+ return openclawDir;
23
+ }
24
+ // Default to Claude Code path (most common)
25
+ return claudeDir;
26
+ }
27
+ export async function installCommand(slug, options) {
28
+ if (!slug || slug.trim().length === 0) {
29
+ console.error(chalk.red("Please provide a skill name. Usage: siteskills install <name>"));
30
+ process.exit(1);
31
+ }
32
+ const baseUrl = getApiUrl();
33
+ const spinner = ora(`Downloading ${chalk.bold(slug)}...`).start();
34
+ try {
35
+ // Fetch the raw SKILL.md content
36
+ const res = await fetch(`${baseUrl}/api/skills/${encodeURIComponent(slug)}/content`);
37
+ if (!res.ok) {
38
+ if (res.status === 404) {
39
+ spinner.fail(chalk.red(`Skill "${slug}" not found.`));
40
+ console.error(chalk.dim(" Check the skill name and try again, or search with:"), chalk.cyan("siteskills search <query>"));
41
+ }
42
+ else {
43
+ spinner.fail(chalk.red(`Failed to download "${slug}" (HTTP ${res.status}).`));
44
+ }
45
+ process.exit(1);
46
+ }
47
+ const content = await res.text();
48
+ if (!content || content.trim().length === 0) {
49
+ spinner.fail(chalk.red(`Skill "${slug}" has no content.`));
50
+ process.exit(1);
51
+ }
52
+ // Determine install directory
53
+ const skillsDir = options.dir || getSkillsDir();
54
+ const skillDir = path.join(skillsDir, slug);
55
+ const skillFile = path.join(skillDir, "SKILL.md");
56
+ // Check if already installed
57
+ if (fs.existsSync(skillFile)) {
58
+ spinner.info(chalk.yellow(`Skill "${slug}" is already installed. Updating...`));
59
+ }
60
+ // Create directory and write file
61
+ fs.mkdirSync(skillDir, { recursive: true });
62
+ fs.writeFileSync(skillFile, content, "utf-8");
63
+ spinner.succeed(chalk.green(`Installed ${chalk.bold(slug)}`));
64
+ console.log(chalk.dim(` ${skillFile}`));
65
+ console.log(chalk.dim(` ${content.split("\n").length} lines, ${content.length} chars`));
66
+ console.log();
67
+ console.log(chalk.dim(" Your AI agent will auto-discover this skill on next use."));
68
+ }
69
+ catch (err) {
70
+ spinner.fail(chalk.red(`Failed to install "${slug}".`));
71
+ console.error(chalk.red(` ${err.message}`));
72
+ process.exit(1);
73
+ }
74
+ }
75
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function listCommand(): Promise<void>;
2
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAqEjD"}
@@ -0,0 +1,59 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ import { requireAuth } from "../lib/config.js";
4
+ import { listSkills } from "../lib/api.js";
5
+ export async function listCommand() {
6
+ let apiKey;
7
+ try {
8
+ apiKey = requireAuth();
9
+ }
10
+ catch (err) {
11
+ console.error(chalk.red(err.message));
12
+ process.exit(1);
13
+ }
14
+ const spinner = ora("Fetching your skills...").start();
15
+ try {
16
+ const response = await listSkills(apiKey);
17
+ if (!response.ok) {
18
+ spinner.fail(chalk.red("Failed to fetch skills."));
19
+ const errorData = response.data;
20
+ console.error(chalk.red(` Error: ${errorData.message || `HTTP ${response.status}`}`));
21
+ process.exit(1);
22
+ }
23
+ const skills = response.data.skills || [];
24
+ spinner.stop();
25
+ if (skills.length === 0) {
26
+ console.log(chalk.yellow("\nYou have no published skills.\n"));
27
+ console.log(chalk.dim("Get started by running `siteskills init` to create a new skill project."));
28
+ return;
29
+ }
30
+ console.log(chalk.bold(`\nYour Skills (${skills.length}):\n`));
31
+ // Table header
32
+ const nameWidth = 30;
33
+ const slugWidth = 25;
34
+ const versionWidth = 12;
35
+ const statusWidth = 12;
36
+ console.log(chalk.dim(" " +
37
+ "Name".padEnd(nameWidth) +
38
+ "Slug".padEnd(slugWidth) +
39
+ "Version".padEnd(versionWidth) +
40
+ "Status".padEnd(statusWidth)));
41
+ console.log(chalk.dim(" " + "-".repeat(nameWidth + slugWidth + versionWidth + statusWidth)));
42
+ for (const skill of skills) {
43
+ const name = (skill.name || "").substring(0, nameWidth - 2).padEnd(nameWidth);
44
+ const slug = (skill.slug || "").substring(0, slugWidth - 2).padEnd(slugWidth);
45
+ const version = (skill.version || "").padEnd(versionWidth);
46
+ const status = skill.status === "published"
47
+ ? chalk.green(skill.status.padEnd(statusWidth))
48
+ : chalk.yellow((skill.status || "unknown").padEnd(statusWidth));
49
+ console.log(` ${name}${slug}${version}${status}`);
50
+ }
51
+ console.log();
52
+ }
53
+ catch (err) {
54
+ spinner.fail(chalk.red("Failed to fetch skills."));
55
+ console.error(chalk.red(` Error: ${err.message}`));
56
+ process.exit(1);
57
+ }
58
+ }
59
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,WAAW,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEvD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACnD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAA+B,CAAC;YAC3D,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,YAAa,SAAS,CAAC,OAAkB,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CACpF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QAC1C,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC,CAAC;YAClG,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC;QAE/D,eAAe;QACf,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,YAAY,GAAG,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,EAAE,CAAC;QAEvB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,IAAI;YACF,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;YACxB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;YACxB,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC;YAC9B,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAC/B,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAE9F,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9E,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9E,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC3D,MAAM,MAAM,GACV,KAAK,CAAC,MAAM,KAAK,WAAW;gBAC1B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBAC/C,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;YAEpE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAa,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function loginCommand(): Promise<void>;
2
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAMA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAoElD"}
@@ -0,0 +1,62 @@
1
+ import chalk from "chalk";
2
+ import inquirer from "inquirer";
3
+ import ora from "ora";
4
+ import { saveConfig, loadConfig } from "../lib/config.js";
5
+ import { login as apiLogin } from "../lib/api.js";
6
+ export async function loginCommand() {
7
+ console.log(chalk.bold("\nSiteSkills Authentication\n"));
8
+ const existingConfig = loadConfig();
9
+ if (existingConfig.apiKey) {
10
+ const { overwrite } = await inquirer.prompt([
11
+ {
12
+ type: "confirm",
13
+ name: "overwrite",
14
+ message: "You are already logged in. Do you want to re-authenticate?",
15
+ default: false,
16
+ },
17
+ ]);
18
+ if (!overwrite) {
19
+ console.log(chalk.yellow("Login cancelled."));
20
+ return;
21
+ }
22
+ }
23
+ const { apiKey } = await inquirer.prompt([
24
+ {
25
+ type: "password",
26
+ name: "apiKey",
27
+ message: "Enter your SiteSkills API key:",
28
+ mask: "*",
29
+ validate: (input) => {
30
+ if (!input || input.trim().length === 0) {
31
+ return "API key cannot be empty.";
32
+ }
33
+ return true;
34
+ },
35
+ },
36
+ ]);
37
+ const spinner = ora("Authenticating...").start();
38
+ try {
39
+ const response = await apiLogin(apiKey.trim());
40
+ if (response.ok) {
41
+ const config = loadConfig();
42
+ config.apiKey = apiKey.trim();
43
+ saveConfig(config);
44
+ spinner.succeed(chalk.green("Authentication successful!"));
45
+ if (response.data.user) {
46
+ console.log(chalk.dim(` Logged in as: ${response.data.user.name || response.data.user.email}`));
47
+ }
48
+ }
49
+ else {
50
+ spinner.fail(chalk.red("Authentication failed."));
51
+ const errorData = response.data;
52
+ console.error(chalk.red(` Error: ${errorData.message || `HTTP ${response.status}`}`));
53
+ process.exit(1);
54
+ }
55
+ }
56
+ catch (err) {
57
+ spinner.fail(chalk.red("Authentication failed."));
58
+ console.error(chalk.red(` Error: ${err instanceof Error ? err.message : "Could not connect to the SiteSkills API."}`));
59
+ process.exit(1);
60
+ }
61
+ }
62
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function logoutCommand(): Promise<void>;
2
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAUnD"}
@@ -0,0 +1,12 @@
1
+ import chalk from "chalk";
2
+ import { clearConfig, getApiKey } from "../lib/config.js";
3
+ export async function logoutCommand() {
4
+ const apiKey = getApiKey();
5
+ if (!apiKey) {
6
+ console.log(chalk.yellow("You are not currently logged in."));
7
+ return;
8
+ }
9
+ clearConfig();
10
+ console.log(chalk.green("Successfully logged out. Credentials have been removed."));
11
+ }
12
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,WAAW,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC,CAAC;AACtF,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function publishCommand(options?: {
2
+ file?: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AAkCA,wBAAsB,cAAc,CAClC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9B,OAAO,CAAC,IAAI,CAAC,CA0Ef"}
@@ -0,0 +1,87 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import chalk from "chalk";
4
+ import ora from "ora";
5
+ import { requireAuth } from "../lib/config.js";
6
+ import { publishSkill } from "../lib/api.js";
7
+ function findSkillMd(startDir, filePath) {
8
+ if (filePath) {
9
+ const resolved = path.resolve(filePath);
10
+ return fs.existsSync(resolved) ? resolved : null;
11
+ }
12
+ const candidate = path.join(startDir, "SKILL.md");
13
+ return fs.existsSync(candidate) ? candidate : null;
14
+ }
15
+ function validateFrontmatter(content) {
16
+ const errors = [];
17
+ if (!content.match(/^---\r?\n/)) {
18
+ errors.push("No YAML frontmatter found (file must start with ---)");
19
+ return errors;
20
+ }
21
+ if (!content.match(/name:\s*.+/)) {
22
+ errors.push("Missing required frontmatter field: name");
23
+ }
24
+ if (!content.match(/description:\s*.+/)) {
25
+ errors.push("Missing required frontmatter field: description");
26
+ }
27
+ if (!content.match(/target-domains:/)) {
28
+ errors.push("Missing required frontmatter field: target-domains");
29
+ }
30
+ return errors;
31
+ }
32
+ export async function publishCommand(options = {}) {
33
+ const cwd = process.cwd();
34
+ console.log(chalk.bold("\nPublishing skill to SiteSkills...\n"));
35
+ // Require authentication
36
+ let apiKey;
37
+ try {
38
+ apiKey = requireAuth();
39
+ }
40
+ catch (err) {
41
+ console.error(chalk.red(err.message));
42
+ process.exit(1);
43
+ }
44
+ // Find SKILL.md
45
+ const skillMdPath = findSkillMd(cwd, options.file);
46
+ if (!skillMdPath) {
47
+ console.error(chalk.red(" Error: No SKILL.md found in current directory. Use --file to specify a path."));
48
+ process.exit(1);
49
+ }
50
+ console.log(chalk.dim(` File: ${skillMdPath}\n`));
51
+ // Read and validate frontmatter
52
+ const content = fs.readFileSync(skillMdPath, "utf8");
53
+ const errors = validateFrontmatter(content);
54
+ if (errors.length > 0) {
55
+ console.log(chalk.red("Validation failed:\n"));
56
+ for (const error of errors) {
57
+ console.log(chalk.red(` ✗ ${error}`));
58
+ }
59
+ process.exit(1);
60
+ }
61
+ // Upload
62
+ const spinner = ora("Uploading to SiteSkills...").start();
63
+ try {
64
+ const response = await publishSkill(apiKey, skillMdPath);
65
+ if (response.ok) {
66
+ spinner.succeed(chalk.green("Skill published successfully!"));
67
+ if (response.data.skill) {
68
+ console.log(chalk.dim(`\n Slug: ${response.data.skill.slug}`));
69
+ console.log(chalk.dim(` Status: ${response.data.skill.status}`));
70
+ console.log(chalk.dim(` URL: https://siteskills.ai/skills/${response.data.skill.slug}`));
71
+ }
72
+ console.log(chalk.dim("\n Your skill will be scanned and reviewed. You'll receive an email with updates."));
73
+ }
74
+ else {
75
+ spinner.fail(chalk.red("Failed to publish skill."));
76
+ const errorData = response.data;
77
+ console.error(chalk.red(` Error: ${errorData.message || `HTTP ${response.status}`}`));
78
+ process.exit(1);
79
+ }
80
+ }
81
+ catch (err) {
82
+ spinner.fail(chalk.red("Failed to publish skill."));
83
+ console.error(chalk.red(` Error: ${err.message}`));
84
+ process.exit(1);
85
+ }
86
+ }
87
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function searchCommand(query: string, options: {
2
+ limit?: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAiBA,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CAoEf"}