heymark 2.0.1 → 2.1.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.
@@ -1,33 +1,33 @@
1
- const { ANTIGRAVITY } = require("@/tools/constants");
2
- const { generate, clean } = require("@/tools/skill-per-folder");
3
-
4
- function createContent(skill) {
5
- const frontmatterLines = [
6
- "---",
7
- `name: ${skill.name}`,
8
- `description: "${skill.description}"`,
9
- "---",
10
- ];
11
-
12
- return `${frontmatterLines.join("\n")}\n\n${skill.body}\n`;
13
- }
14
-
15
- module.exports = {
16
- key: ANTIGRAVITY.KEY,
17
- name: ANTIGRAVITY.NAME,
18
- output: ANTIGRAVITY.OUTPUT_PATTERN,
19
-
20
- generate(skills, cwd) {
21
- return generate({
22
- cwd,
23
- dir: ANTIGRAVITY.SKILLS_DIR,
24
- fileName: ANTIGRAVITY.SKILL_FILE_NAME,
25
- skills,
26
- createContent,
27
- });
28
- },
29
-
30
- clean(skillNames, cwd) {
31
- return clean(cwd, ANTIGRAVITY.SKILLS_DIR);
32
- },
33
- };
1
+ const { ANTIGRAVITY } = require("@/tools/constants");
2
+ const { generate, clean } = require("@/tools/skill-per-folder");
3
+
4
+ function createContent(skill) {
5
+ const frontmatterLines = [
6
+ "---",
7
+ `name: ${skill.name}`,
8
+ `description: "${skill.description}"`,
9
+ "---",
10
+ ];
11
+
12
+ return `${frontmatterLines.join("\n")}\n\n${skill.body}\n`;
13
+ }
14
+
15
+ module.exports = {
16
+ key: ANTIGRAVITY.KEY,
17
+ name: ANTIGRAVITY.NAME,
18
+ output: ANTIGRAVITY.OUTPUT_PATTERN,
19
+
20
+ generate(skills, cwd) {
21
+ return generate({
22
+ cwd,
23
+ dir: ANTIGRAVITY.SKILLS_DIR,
24
+ fileName: ANTIGRAVITY.SKILL_FILE_NAME,
25
+ skills,
26
+ createContent,
27
+ });
28
+ },
29
+
30
+ clean(skillNames, cwd) {
31
+ return clean(cwd, ANTIGRAVITY.SKILLS_DIR);
32
+ },
33
+ };
@@ -1,33 +1,33 @@
1
- const { CLAUDE_CODE } = require("@/tools/constants");
2
- const { generate, clean } = require("@/tools/skill-per-folder");
3
-
4
- function createContent(skill) {
5
- const frontmatterLines = [
6
- "---",
7
- `name: ${skill.name}`,
8
- `description: "${skill.description}"`,
9
- "---",
10
- ];
11
-
12
- return `${frontmatterLines.join("\n")}\n\n${skill.body}\n`;
13
- }
14
-
15
- module.exports = {
16
- key: CLAUDE_CODE.KEY,
17
- name: CLAUDE_CODE.NAME,
18
- output: CLAUDE_CODE.OUTPUT_PATTERN,
19
-
20
- generate(skills, cwd) {
21
- return generate({
22
- cwd,
23
- dir: CLAUDE_CODE.SKILLS_DIR,
24
- fileName: CLAUDE_CODE.SKILL_FILE_NAME,
25
- skills,
26
- createContent,
27
- });
28
- },
29
-
30
- clean(skillNames, cwd) {
31
- return clean(cwd, CLAUDE_CODE.SKILLS_DIR);
32
- },
33
- };
1
+ const { CLAUDE_CODE } = require("@/tools/constants");
2
+ const { generate, clean } = require("@/tools/skill-per-folder");
3
+
4
+ function createContent(skill) {
5
+ const frontmatterLines = [
6
+ "---",
7
+ `name: ${skill.name}`,
8
+ `description: "${skill.description}"`,
9
+ "---",
10
+ ];
11
+
12
+ return `${frontmatterLines.join("\n")}\n\n${skill.body}\n`;
13
+ }
14
+
15
+ module.exports = {
16
+ key: CLAUDE_CODE.KEY,
17
+ name: CLAUDE_CODE.NAME,
18
+ output: CLAUDE_CODE.OUTPUT_PATTERN,
19
+
20
+ generate(skills, cwd) {
21
+ return generate({
22
+ cwd,
23
+ dir: CLAUDE_CODE.SKILLS_DIR,
24
+ fileName: CLAUDE_CODE.SKILL_FILE_NAME,
25
+ skills,
26
+ createContent,
27
+ });
28
+ },
29
+
30
+ clean(skillNames, cwd) {
31
+ return clean(cwd, CLAUDE_CODE.SKILLS_DIR);
32
+ },
33
+ };
@@ -1,33 +1,33 @@
1
- const { CODEX } = require("@/tools/constants");
2
- const { generate, clean } = require("@/tools/skill-per-folder");
3
-
4
- function createContent(skill) {
5
- const frontmatterLines = [
6
- "---",
7
- `name: ${skill.name}`,
8
- `description: "${skill.description}"`,
9
- "---",
10
- ];
11
-
12
- return `${frontmatterLines.join("\n")}\n\n${skill.body}\n`;
13
- }
14
-
15
- module.exports = {
16
- key: CODEX.KEY,
17
- name: CODEX.NAME,
18
- output: CODEX.OUTPUT_PATTERN,
19
-
20
- generate(skills, cwd) {
21
- return generate({
22
- cwd,
23
- dir: CODEX.SKILLS_DIR,
24
- fileName: CODEX.SKILL_FILE_NAME,
25
- skills,
26
- createContent,
27
- });
28
- },
29
-
30
- clean(skillNames, cwd) {
31
- return clean(cwd, CODEX.SKILLS_DIR);
32
- },
33
- };
1
+ const { CODEX } = require("@/tools/constants");
2
+ const { generate, clean } = require("@/tools/skill-per-folder");
3
+
4
+ function createContent(skill) {
5
+ const frontmatterLines = [
6
+ "---",
7
+ `name: ${skill.name}`,
8
+ `description: "${skill.description}"`,
9
+ "---",
10
+ ];
11
+
12
+ return `${frontmatterLines.join("\n")}\n\n${skill.body}\n`;
13
+ }
14
+
15
+ module.exports = {
16
+ key: CODEX.KEY,
17
+ name: CODEX.NAME,
18
+ output: CODEX.OUTPUT_PATTERN,
19
+
20
+ generate(skills, cwd) {
21
+ return generate({
22
+ cwd,
23
+ dir: CODEX.SKILLS_DIR,
24
+ fileName: CODEX.SKILL_FILE_NAME,
25
+ skills,
26
+ createContent,
27
+ });
28
+ },
29
+
30
+ clean(skillNames, cwd) {
31
+ return clean(cwd, CODEX.SKILLS_DIR);
32
+ },
33
+ };
@@ -1,44 +1,52 @@
1
- const path = require("path");
2
-
3
- const ANTIGRAVITY = {
4
- KEY: "antigravity",
5
- NAME: "Antigravity",
6
- SKILLS_DIR: path.join(".agent", "skills"),
7
- SKILL_FILE_NAME: "SKILL.md",
8
- OUTPUT_PATTERN: ".agent/skills/*/SKILL.md",
9
- };
10
-
11
- const CLAUDE_CODE = {
12
- KEY: "claude-code",
13
- NAME: "Claude Code",
14
- SKILLS_DIR: path.join(".claude", "skills"),
15
- SKILL_FILE_NAME: "SKILL.md",
16
- OUTPUT_PATTERN: ".claude/skills/*/SKILL.md",
17
- };
18
-
19
- const CODEX = {
20
- KEY: "codex",
21
- NAME: "Codex",
22
- SKILLS_DIR: path.join(".agents", "skills"),
23
- SKILL_FILE_NAME: "SKILL.md",
24
- OUTPUT_PATTERN: ".agents/skills/*/SKILL.md",
25
- };
26
-
27
- const COPILOT = {
28
- KEY: "copilot",
29
- NAME: "Copilot",
30
- INSTRUCTIONS_DIR: path.join(".github", "instructions"),
31
- FILE_SUFFIX: ".instructions.md",
32
- DEFAULT_GLOB: "**",
33
- OUTPUT_PATTERN: ".github/instructions/*.instructions.md",
34
- };
35
-
36
- const CURSOR = {
37
- KEY: "cursor",
38
- NAME: "Cursor",
39
- SKILLS_DIR: path.join(".cursor", "rules"),
40
- FILE_SUFFIX: ".mdc",
41
- OUTPUT_PATTERN: ".cursor/rules/*.mdc",
42
- };
43
-
44
- module.exports = { ANTIGRAVITY, CLAUDE_CODE, CODEX, COPILOT, CURSOR };
1
+ const path = require("path");
2
+
3
+ const ANTIGRAVITY = {
4
+ KEY: "antigravity",
5
+ NAME: "Antigravity",
6
+ SKILLS_DIR: path.join(".agent", "skills"),
7
+ SKILL_FILE_NAME: "SKILL.md",
8
+ OUTPUT_PATTERN: ".agent/skills/*/SKILL.md",
9
+ };
10
+
11
+ const CLAUDE_CODE = {
12
+ KEY: "claude-code",
13
+ NAME: "Claude Code",
14
+ SKILLS_DIR: path.join(".claude", "skills"),
15
+ SKILL_FILE_NAME: "SKILL.md",
16
+ OUTPUT_PATTERN: ".claude/skills/*/SKILL.md",
17
+ };
18
+
19
+ const CODEX = {
20
+ KEY: "codex",
21
+ NAME: "Codex",
22
+ SKILLS_DIR: path.join(".agents", "skills"),
23
+ SKILL_FILE_NAME: "SKILL.md",
24
+ OUTPUT_PATTERN: ".agents/skills/*/SKILL.md",
25
+ };
26
+
27
+ const COPILOT = {
28
+ KEY: "copilot",
29
+ NAME: "Copilot",
30
+ INSTRUCTIONS_DIR: path.join(".github", "instructions"),
31
+ FILE_SUFFIX: ".instructions.md",
32
+ DEFAULT_GLOB: "**",
33
+ OUTPUT_PATTERN: ".github/instructions/*.instructions.md",
34
+ };
35
+
36
+ const CURSOR = {
37
+ KEY: "cursor",
38
+ NAME: "Cursor",
39
+ SKILLS_DIR: path.join(".cursor", "rules"),
40
+ FILE_SUFFIX: ".mdc",
41
+ OUTPUT_PATTERN: ".cursor/rules/*.mdc",
42
+ };
43
+
44
+ const OPENCLAW = {
45
+ KEY: "openclaw",
46
+ NAME: "OpenClaw",
47
+ SKILLS_DIR: path.join(".openclaw", "skills"),
48
+ SKILL_FILE_NAME: "SKILL.md",
49
+ OUTPUT_PATTERN: "~/.openclaw/skills/*/SKILL.md",
50
+ };
51
+
52
+ module.exports = { ANTIGRAVITY, CLAUDE_CODE, CODEX, COPILOT, CURSOR, OPENCLAW };
@@ -1,40 +1,40 @@
1
- const { COPILOT } = require("@/tools/constants");
2
- const { generate, clean } = require("@/tools/skill-per-file");
3
-
4
- function getFileName(skill) {
5
- return `${skill.name}${COPILOT.FILE_SUFFIX}`;
6
- }
7
-
8
- function createContent(skill) {
9
- const globs = skill.globs
10
- ? skill.globs
11
- .split(",")
12
- .map((g) => g.trim())
13
- .filter(Boolean)
14
- : [];
15
- const applyToLines = (globs.length > 0 ? globs : [COPILOT.DEFAULT_GLOB])
16
- .map((glob) => ` - "${glob}"`)
17
- .join("\n");
18
- const header = `applyTo:\n${applyToLines}\n---`;
19
- return `${header}\n\n${skill.body}\n`;
20
- }
21
-
22
- module.exports = {
23
- key: COPILOT.KEY,
24
- name: COPILOT.NAME,
25
- output: COPILOT.OUTPUT_PATTERN,
26
-
27
- generate(skills, cwd) {
28
- return generate({
29
- cwd,
30
- dir: COPILOT.INSTRUCTIONS_DIR,
31
- skills,
32
- getFileName,
33
- createContent,
34
- });
35
- },
36
-
37
- clean(skillNames, cwd) {
38
- return clean(cwd, COPILOT.INSTRUCTIONS_DIR);
39
- },
40
- };
1
+ const { COPILOT } = require("@/tools/constants");
2
+ const { generate, clean } = require("@/tools/skill-per-file");
3
+
4
+ function getFileName(skill) {
5
+ return `${skill.name}${COPILOT.FILE_SUFFIX}`;
6
+ }
7
+
8
+ function createContent(skill) {
9
+ const globs = skill.globs
10
+ ? skill.globs
11
+ .split(",")
12
+ .map((g) => g.trim())
13
+ .filter(Boolean)
14
+ : [];
15
+ const applyToLines = (globs.length > 0 ? globs : [COPILOT.DEFAULT_GLOB])
16
+ .map((glob) => ` - "${glob}"`)
17
+ .join("\n");
18
+ const header = `applyTo:\n${applyToLines}\n---`;
19
+ return `${header}\n\n${skill.body}\n`;
20
+ }
21
+
22
+ module.exports = {
23
+ key: COPILOT.KEY,
24
+ name: COPILOT.NAME,
25
+ output: COPILOT.OUTPUT_PATTERN,
26
+
27
+ generate(skills, cwd) {
28
+ return generate({
29
+ cwd,
30
+ dir: COPILOT.INSTRUCTIONS_DIR,
31
+ skills,
32
+ getFileName,
33
+ createContent,
34
+ });
35
+ },
36
+
37
+ clean(skillNames, cwd) {
38
+ return clean(cwd, COPILOT.INSTRUCTIONS_DIR);
39
+ },
40
+ };
@@ -1,39 +1,39 @@
1
- const { CURSOR } = require("@/tools/constants");
2
- const { generate, clean } = require("@/tools/skill-per-file");
3
-
4
- function getFileName(skill) {
5
- return `${skill.name}${CURSOR.FILE_SUFFIX}`;
6
- }
7
-
8
- function createContent(skill) {
9
- const frontmatterLines = ["---", `description: "${skill.description}"`];
10
-
11
- if (skill.globs) {
12
- frontmatterLines.push(`globs: "${skill.globs}"`);
13
- }
14
-
15
- frontmatterLines.push(`alwaysApply: ${skill.alwaysApply}`);
16
- frontmatterLines.push("---");
17
-
18
- return `${frontmatterLines.join("\n")}\n\n${skill.body}\n`;
19
- }
20
-
21
- module.exports = {
22
- key: CURSOR.KEY,
23
- name: CURSOR.NAME,
24
- output: CURSOR.OUTPUT_PATTERN,
25
-
26
- generate(skills, cwd) {
27
- return generate({
28
- cwd,
29
- dir: CURSOR.SKILLS_DIR,
30
- skills,
31
- getFileName,
32
- createContent,
33
- });
34
- },
35
-
36
- clean(skillNames, cwd) {
37
- return clean(cwd, CURSOR.SKILLS_DIR);
38
- },
39
- };
1
+ const { CURSOR } = require("@/tools/constants");
2
+ const { generate, clean } = require("@/tools/skill-per-file");
3
+
4
+ function getFileName(skill) {
5
+ return `${skill.name}${CURSOR.FILE_SUFFIX}`;
6
+ }
7
+
8
+ function createContent(skill) {
9
+ const frontmatterLines = ["---", `description: "${skill.description}"`];
10
+
11
+ if (skill.globs) {
12
+ frontmatterLines.push(`globs: "${skill.globs}"`);
13
+ }
14
+
15
+ frontmatterLines.push(`alwaysApply: ${skill.alwaysApply}`);
16
+ frontmatterLines.push("---");
17
+
18
+ return `${frontmatterLines.join("\n")}\n\n${skill.body}\n`;
19
+ }
20
+
21
+ module.exports = {
22
+ key: CURSOR.KEY,
23
+ name: CURSOR.NAME,
24
+ output: CURSOR.OUTPUT_PATTERN,
25
+
26
+ generate(skills, cwd) {
27
+ return generate({
28
+ cwd,
29
+ dir: CURSOR.SKILLS_DIR,
30
+ skills,
31
+ getFileName,
32
+ createContent,
33
+ });
34
+ },
35
+
36
+ clean(skillNames, cwd) {
37
+ return clean(cwd, CURSOR.SKILLS_DIR);
38
+ },
39
+ };
@@ -1,17 +1,17 @@
1
- const fs = require("fs");
2
- const path = require("path");
3
-
4
- const TOOLS_DIR = path.join(__dirname);
5
-
6
- function loadTools() {
7
- const tools = fs
8
- .readdirSync(TOOLS_DIR)
9
- .filter((name) => fs.statSync(path.join(TOOLS_DIR, name)).isDirectory())
10
- .map((name) => require(path.join(TOOLS_DIR, name)));
11
-
12
- return Object.fromEntries(tools.map((tool) => [tool.key, tool]));
13
- }
14
-
15
- module.exports = {
16
- loadTools,
17
- };
1
+ const fs = require("fs");
2
+ const path = require("path");
3
+
4
+ const TOOLS_DIR = path.join(__dirname);
5
+
6
+ function loadTools() {
7
+ const tools = fs
8
+ .readdirSync(TOOLS_DIR)
9
+ .filter((name) => fs.statSync(path.join(TOOLS_DIR, name)).isDirectory())
10
+ .map((name) => require(path.join(TOOLS_DIR, name)));
11
+
12
+ return Object.fromEntries(tools.map((tool) => [tool.key, tool]));
13
+ }
14
+
15
+ module.exports = {
16
+ loadTools,
17
+ };
@@ -0,0 +1,72 @@
1
+ const fs = require("fs");
2
+ const path = require("path");
3
+ const os = require("os");
4
+ const { OPENCLAW } = require("@/tools/constants");
5
+
6
+ function createContent(skill) {
7
+ const frontmatterLines = [
8
+ "---",
9
+ `name: ${skill.name}`,
10
+ `description: "${skill.description}"`,
11
+ "---",
12
+ ];
13
+
14
+ return `${frontmatterLines.join("\n")}\n\n${skill.body}\n`;
15
+ }
16
+
17
+ function getSkillsDir() {
18
+ return path.join(os.homedir(), OPENCLAW.SKILLS_DIR);
19
+ }
20
+
21
+ function generate(skills) {
22
+ const skillsDir = getSkillsDir();
23
+
24
+ for (const skill of skills) {
25
+ try {
26
+ const skillDir = path.join(skillsDir, skill.name);
27
+ fs.mkdirSync(skillDir, { recursive: true });
28
+ fs.writeFileSync(path.join(skillDir, OPENCLAW.SKILL_FILE_NAME), createContent(skill), "utf8");
29
+ } catch (err) {
30
+ const skillDir = path.join(skillsDir, skill.name);
31
+ throw new Error(`OpenClaw: failed to generate skill "${skill.name}" at ${skillDir}: ${err.message}`);
32
+ }
33
+ }
34
+
35
+ return skills.length;
36
+ }
37
+
38
+ function clean(skillNames) {
39
+ const skillsDir = getSkillsDir();
40
+ if (!fs.existsSync(skillsDir)) {
41
+ return [];
42
+ }
43
+
44
+ const cleanedPaths = [];
45
+ for (const skillName of skillNames) {
46
+ const skillDir = path.join(skillsDir, skillName);
47
+ if (!fs.existsSync(skillDir)) continue;
48
+
49
+ try {
50
+ fs.rmSync(skillDir, { recursive: true, force: true });
51
+ cleanedPaths.push(path.join(skillsDir, skillName));
52
+ } catch (err) {
53
+ throw new Error(`OpenClaw: failed to clean skill "${skillName}" at ${skillDir}: ${err.message}`);
54
+ }
55
+ }
56
+
57
+ return cleanedPaths;
58
+ }
59
+
60
+ module.exports = {
61
+ key: OPENCLAW.KEY,
62
+ name: OPENCLAW.NAME,
63
+ output: OPENCLAW.OUTPUT_PATTERN,
64
+
65
+ generate(skills) {
66
+ return generate(skills);
67
+ },
68
+
69
+ clean(skillNames) {
70
+ return clean(skillNames);
71
+ },
72
+ };
@@ -1,29 +1,29 @@
1
- const fs = require("fs");
2
- const path = require("path");
3
-
4
- function generate({ cwd, dir, skills, getFileName, createContent }) {
5
- const destDir = path.join(cwd, dir);
6
- fs.mkdirSync(destDir, { recursive: true });
7
-
8
- for (const skill of skills) {
9
- const filePath = path.join(destDir, getFileName(skill));
10
- fs.writeFileSync(filePath, createContent(skill), "utf8");
11
- }
12
-
13
- return skills.length;
14
- }
15
-
16
- function clean(cwd, dir) {
17
- const targetPath = path.join(cwd, dir);
18
- if (!fs.existsSync(targetPath)) {
19
- return [];
20
- }
21
-
22
- fs.rmSync(targetPath, { recursive: true, force: true });
23
- return [dir];
24
- }
25
-
26
- module.exports = {
27
- generate,
28
- clean,
29
- };
1
+ const fs = require("fs");
2
+ const path = require("path");
3
+
4
+ function generate({ cwd, dir, skills, getFileName, createContent }) {
5
+ const destDir = path.join(cwd, dir);
6
+ fs.mkdirSync(destDir, { recursive: true });
7
+
8
+ for (const skill of skills) {
9
+ const filePath = path.join(destDir, getFileName(skill));
10
+ fs.writeFileSync(filePath, createContent(skill), "utf8");
11
+ }
12
+
13
+ return skills.length;
14
+ }
15
+
16
+ function clean(cwd, dir) {
17
+ const targetPath = path.join(cwd, dir);
18
+ if (!fs.existsSync(targetPath)) {
19
+ return [];
20
+ }
21
+
22
+ fs.rmSync(targetPath, { recursive: true, force: true });
23
+ return [dir];
24
+ }
25
+
26
+ module.exports = {
27
+ generate,
28
+ clean,
29
+ };
@@ -1,18 +1,18 @@
1
- const fs = require("fs");
2
- const path = require("path");
3
- const { clean } = require("@/tools/skill-per-file");
4
-
5
- function generate({ cwd, dir, fileName, skills, createContent }) {
6
- for (const skill of skills) {
7
- const skillDir = path.join(cwd, dir, skill.name);
8
- fs.mkdirSync(skillDir, { recursive: true });
9
- fs.writeFileSync(path.join(skillDir, fileName), createContent(skill), "utf8");
10
- }
11
-
12
- return skills.length;
13
- }
14
-
15
- module.exports = {
16
- generate,
17
- clean,
18
- };
1
+ const fs = require("fs");
2
+ const path = require("path");
3
+ const { clean } = require("@/tools/skill-per-file");
4
+
5
+ function generate({ cwd, dir, fileName, skills, createContent }) {
6
+ for (const skill of skills) {
7
+ const skillDir = path.join(cwd, dir, skill.name);
8
+ fs.mkdirSync(skillDir, { recursive: true });
9
+ fs.writeFileSync(path.join(skillDir, fileName), createContent(skill), "utf8");
10
+ }
11
+
12
+ return skills.length;
13
+ }
14
+
15
+ module.exports = {
16
+ generate,
17
+ clean,
18
+ };