@agents-inc/cli 0.86.0 → 0.87.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.
- package/CHANGELOG.md +10 -0
- package/dist/chunk-5UJJQFET.js +564 -0
- package/dist/chunk-5UJJQFET.js.map +1 -0
- package/dist/{chunk-GED2F75H.js → chunk-7FFNNDJQ.js} +176 -120
- package/dist/chunk-7FFNNDJQ.js.map +1 -0
- package/dist/{chunk-BV2MIQ3O.js → chunk-I5AZKNNL.js} +1 -1
- package/dist/chunk-I5AZKNNL.js.map +1 -0
- package/dist/chunk-J6PI73YV.js +68 -0
- package/dist/chunk-J6PI73YV.js.map +1 -0
- package/dist/commands/compile.js +26 -20
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/diff.js +681 -82
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +30 -58
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +164 -32
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +177 -27
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/import/skill.js +197 -33
- package/dist/commands/import/skill.js.map +1 -1
- package/dist/commands/info.js +41 -34
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.js +3 -6
- package/dist/commands/new/agent.js +140 -44
- package/dist/commands/new/agent.js.map +1 -1
- package/dist/commands/new/marketplace.js +4 -4
- package/dist/commands/new/marketplace.js.map +1 -1
- package/dist/commands/new/skill.js +194 -30
- package/dist/commands/new/skill.js.map +1 -1
- package/dist/commands/outdated.js +1 -3
- package/dist/commands/outdated.js.map +1 -1
- package/dist/commands/search.js +162 -65
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/uninstall.js +259 -62
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +232 -163
- package/dist/commands/update.js.map +1 -1
- package/dist/components/skill-search/skill-search.js +1 -1
- package/dist/hooks/init.js +2 -4
- package/dist/hooks/init.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-BV2MIQ3O.js.map +0 -1
- package/dist/chunk-DCVCFBQ7.js +0 -1800
- package/dist/chunk-DCVCFBQ7.js.map +0 -1
- package/dist/chunk-GED2F75H.js.map +0 -1
- package/dist/chunk-O5ZWS26C.js +0 -166
- package/dist/chunk-O5ZWS26C.js.map +0 -1
- package/dist/chunk-XQK4S22C.js +0 -202
- package/dist/chunk-XQK4S22C.js.map +0 -1
package/dist/chunk-XQK4S22C.js
DELETED
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
computeSkillFolderHash,
|
|
4
|
-
loadConfig
|
|
5
|
-
} from "./chunk-TMTUTUEV.js";
|
|
6
|
-
import {
|
|
7
|
-
ensureDir,
|
|
8
|
-
fileExists,
|
|
9
|
-
verbose,
|
|
10
|
-
writeFile
|
|
11
|
-
} from "./chunk-NUU3U43A.js";
|
|
12
|
-
import {
|
|
13
|
-
DEFAULT_VERSION,
|
|
14
|
-
KEBAB_CASE_PATTERN,
|
|
15
|
-
SKILL_CATEGORIES_PATH,
|
|
16
|
-
SKILL_RULES_PATH,
|
|
17
|
-
STANDARD_FILES
|
|
18
|
-
} from "./chunk-6PGL2XMY.js";
|
|
19
|
-
import {
|
|
20
|
-
init_esm_shims
|
|
21
|
-
} from "./chunk-DHET7RCE.js";
|
|
22
|
-
|
|
23
|
-
// src/cli/lib/operations/scaffold-skill.ts
|
|
24
|
-
init_esm_shims();
|
|
25
|
-
import path from "path";
|
|
26
|
-
function validateSkillName(name) {
|
|
27
|
-
if (!name || name.trim() === "") {
|
|
28
|
-
return "Skill name is required";
|
|
29
|
-
}
|
|
30
|
-
if (!KEBAB_CASE_PATTERN.test(name)) {
|
|
31
|
-
return "Skill name must be kebab-case (lowercase letters, numbers, and hyphens, starting with a letter)";
|
|
32
|
-
}
|
|
33
|
-
return null;
|
|
34
|
-
}
|
|
35
|
-
function toTitleCase(kebabCase) {
|
|
36
|
-
return kebabCase.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
|
|
37
|
-
}
|
|
38
|
-
function generateSkillMd(name) {
|
|
39
|
-
const titleName = toTitleCase(name);
|
|
40
|
-
return `---
|
|
41
|
-
name: ${name}
|
|
42
|
-
description: Brief description of this skill
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
# ${titleName}
|
|
46
|
-
|
|
47
|
-
> **Quick Guide:** Add a brief summary of what this skill teaches.
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
<critical_requirements>
|
|
52
|
-
|
|
53
|
-
## CRITICAL: Before Using This Skill
|
|
54
|
-
|
|
55
|
-
**(Add critical requirements here)**
|
|
56
|
-
|
|
57
|
-
</critical_requirements>
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
**When to use:**
|
|
62
|
-
|
|
63
|
-
- Add use cases here
|
|
64
|
-
|
|
65
|
-
**Key patterns covered:**
|
|
66
|
-
|
|
67
|
-
- Add patterns here
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
<patterns>
|
|
72
|
-
|
|
73
|
-
## Core Patterns
|
|
74
|
-
|
|
75
|
-
### Pattern 1: Example Pattern
|
|
76
|
-
|
|
77
|
-
Add your patterns here.
|
|
78
|
-
|
|
79
|
-
</patterns>
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
<critical_reminders>
|
|
84
|
-
|
|
85
|
-
## CRITICAL REMINDERS
|
|
86
|
-
|
|
87
|
-
**(Repeat critical requirements here)**
|
|
88
|
-
|
|
89
|
-
</critical_reminders>
|
|
90
|
-
`;
|
|
91
|
-
}
|
|
92
|
-
function generateMetadataYaml(name, author, category, contentHash, domain) {
|
|
93
|
-
const titleName = toTitleCase(name);
|
|
94
|
-
return `# yaml-language-server: $schema=https://raw.githubusercontent.com/agents-inc/cli/main/src/schemas/custom-metadata.schema.json
|
|
95
|
-
custom: true
|
|
96
|
-
domain: ${domain}
|
|
97
|
-
category: ${category}
|
|
98
|
-
author: "${author}"
|
|
99
|
-
displayName: ${titleName}
|
|
100
|
-
slug: ${name}
|
|
101
|
-
cliDescription: Brief description
|
|
102
|
-
usageGuidance: Use when <guidance>.
|
|
103
|
-
contentHash: ${contentHash}
|
|
104
|
-
`;
|
|
105
|
-
}
|
|
106
|
-
var DEFAULT_CATEGORY_ORDER = 99;
|
|
107
|
-
var CATEGORIES_TS_COMMENT = "// Skill category definitions";
|
|
108
|
-
var RULES_TS_COMMENT = "// Skill rules configuration";
|
|
109
|
-
function formatTsExport(comment, data) {
|
|
110
|
-
const body = JSON.stringify(data, null, 2);
|
|
111
|
-
return `${comment}
|
|
112
|
-
export default ${body};
|
|
113
|
-
`;
|
|
114
|
-
}
|
|
115
|
-
function buildCategoryEntry(category, domain) {
|
|
116
|
-
const categoryPart = category.includes("-") ? category.slice(category.indexOf("-") + 1) : category;
|
|
117
|
-
const entry = {
|
|
118
|
-
id: category,
|
|
119
|
-
displayName: toTitleCase(categoryPart),
|
|
120
|
-
description: `Skills for ${toTitleCase(categoryPart)}`,
|
|
121
|
-
exclusive: true,
|
|
122
|
-
required: false,
|
|
123
|
-
order: DEFAULT_CATEGORY_ORDER,
|
|
124
|
-
custom: true
|
|
125
|
-
};
|
|
126
|
-
entry.domain = domain;
|
|
127
|
-
return entry;
|
|
128
|
-
}
|
|
129
|
-
function generateSkillCategoriesTs(category, domain) {
|
|
130
|
-
const entry = buildCategoryEntry(category, domain);
|
|
131
|
-
const data = {
|
|
132
|
-
version: DEFAULT_VERSION,
|
|
133
|
-
categories: {
|
|
134
|
-
[category]: entry
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
return formatTsExport(CATEGORIES_TS_COMMENT, data);
|
|
138
|
-
}
|
|
139
|
-
function generateSkillRulesTs() {
|
|
140
|
-
const data = {
|
|
141
|
-
version: DEFAULT_VERSION,
|
|
142
|
-
relationships: {
|
|
143
|
-
conflicts: [],
|
|
144
|
-
discourages: [],
|
|
145
|
-
recommends: [],
|
|
146
|
-
requires: [],
|
|
147
|
-
alternatives: []
|
|
148
|
-
}
|
|
149
|
-
};
|
|
150
|
-
return formatTsExport(RULES_TS_COMMENT, data);
|
|
151
|
-
}
|
|
152
|
-
async function scaffoldSkillFiles(options) {
|
|
153
|
-
const { name, author, category, domain, skillDir } = options;
|
|
154
|
-
const skillMdContent = generateSkillMd(name);
|
|
155
|
-
const skillMdPath = path.join(skillDir, STANDARD_FILES.SKILL_MD);
|
|
156
|
-
const metadataPath = path.join(skillDir, STANDARD_FILES.METADATA_YAML);
|
|
157
|
-
await writeFile(skillMdPath, skillMdContent);
|
|
158
|
-
const contentHash = await computeSkillFolderHash(skillDir);
|
|
159
|
-
const metadataContent = generateMetadataYaml(name, author, category, contentHash, domain);
|
|
160
|
-
await writeFile(metadataPath, metadataContent);
|
|
161
|
-
return { skillMdPath, metadataPath, contentHash };
|
|
162
|
-
}
|
|
163
|
-
async function updateSkillRegistryConfig(options) {
|
|
164
|
-
const { projectRoot, category, domain } = options;
|
|
165
|
-
const categoriesPath = path.join(projectRoot, SKILL_CATEGORIES_PATH);
|
|
166
|
-
const rulesPath = path.join(projectRoot, SKILL_RULES_PATH);
|
|
167
|
-
let categoriesCreated = false;
|
|
168
|
-
let categoriesUpdated = false;
|
|
169
|
-
let rulesCreated = false;
|
|
170
|
-
if (await fileExists(categoriesPath)) {
|
|
171
|
-
const parsed = await loadConfig(categoriesPath) ?? {};
|
|
172
|
-
const categories = parsed.categories ?? {};
|
|
173
|
-
if (!categories[category]) {
|
|
174
|
-
categories[category] = buildCategoryEntry(category, domain);
|
|
175
|
-
parsed.categories = categories;
|
|
176
|
-
await writeFile(categoriesPath, formatTsExport(CATEGORIES_TS_COMMENT, parsed));
|
|
177
|
-
verbose(`Added category '${category}' to ${SKILL_CATEGORIES_PATH}`);
|
|
178
|
-
categoriesUpdated = true;
|
|
179
|
-
}
|
|
180
|
-
} else {
|
|
181
|
-
await ensureDir(path.dirname(categoriesPath));
|
|
182
|
-
await writeFile(categoriesPath, generateSkillCategoriesTs(category, domain));
|
|
183
|
-
verbose(`Created ${SKILL_CATEGORIES_PATH}`);
|
|
184
|
-
categoriesCreated = true;
|
|
185
|
-
}
|
|
186
|
-
if (!await fileExists(rulesPath)) {
|
|
187
|
-
await ensureDir(path.dirname(rulesPath));
|
|
188
|
-
await writeFile(rulesPath, generateSkillRulesTs());
|
|
189
|
-
verbose(`Created ${SKILL_RULES_PATH}`);
|
|
190
|
-
rulesCreated = true;
|
|
191
|
-
}
|
|
192
|
-
return { categoriesCreated, categoriesUpdated, rulesCreated };
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
export {
|
|
196
|
-
validateSkillName,
|
|
197
|
-
generateSkillCategoriesTs,
|
|
198
|
-
generateSkillRulesTs,
|
|
199
|
-
scaffoldSkillFiles,
|
|
200
|
-
updateSkillRegistryConfig
|
|
201
|
-
};
|
|
202
|
-
//# sourceMappingURL=chunk-XQK4S22C.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/lib/operations/scaffold-skill.ts"],"sourcesContent":["import path from \"path\";\nimport { loadConfig } from \"../configuration/config-loader.js\";\nimport { computeSkillFolderHash } from \"../versioning.js\";\nimport { writeFile, fileExists, ensureDir } from \"../../utils/fs.js\";\nimport { verbose } from \"../../utils/logger.js\";\nimport {\n DEFAULT_VERSION,\n KEBAB_CASE_PATTERN,\n SKILL_CATEGORIES_PATH,\n SKILL_RULES_PATH,\n STANDARD_FILES,\n} from \"../../consts.js\";\nimport type { CategoryPath } from \"../../types/index.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type ScaffoldSkillOptions = {\n name: string;\n author: string;\n category: CategoryPath;\n domain: string;\n skillDir: string;\n};\n\nexport type ScaffoldSkillResult = {\n skillMdPath: string;\n metadataPath: string;\n contentHash: string;\n};\n\nexport type RegistryUpdateOptions = {\n projectRoot: string;\n category: CategoryPath;\n domain: string;\n};\n\nexport type RegistryUpdateResult = {\n categoriesCreated: boolean;\n categoriesUpdated: boolean;\n rulesCreated: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// Validation\n// ---------------------------------------------------------------------------\n\n/**\n * Validates that a skill name is non-empty and matches kebab-case format.\n *\n * @returns An error message string if invalid, or `null` if valid.\n */\nexport function validateSkillName(name: string): string | null {\n if (!name || name.trim() === \"\") {\n return \"Skill name is required\";\n }\n\n if (!KEBAB_CASE_PATTERN.test(name)) {\n return \"Skill name must be kebab-case (lowercase letters, numbers, and hyphens, starting with a letter)\";\n }\n\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Content generation\n// ---------------------------------------------------------------------------\n\nexport function toTitleCase(kebabCase: string): string {\n return kebabCase\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n\nexport function generateSkillMd(name: string): string {\n const titleName = toTitleCase(name);\n\n return `---\nname: ${name}\ndescription: Brief description of this skill\n---\n\n# ${titleName}\n\n> **Quick Guide:** Add a brief summary of what this skill teaches.\n\n---\n\n<critical_requirements>\n\n## CRITICAL: Before Using This Skill\n\n**(Add critical requirements here)**\n\n</critical_requirements>\n\n---\n\n**When to use:**\n\n- Add use cases here\n\n**Key patterns covered:**\n\n- Add patterns here\n\n---\n\n<patterns>\n\n## Core Patterns\n\n### Pattern 1: Example Pattern\n\nAdd your patterns here.\n\n</patterns>\n\n---\n\n<critical_reminders>\n\n## CRITICAL REMINDERS\n\n**(Repeat critical requirements here)**\n\n</critical_reminders>\n`;\n}\n\nexport function generateMetadataYaml(\n name: string,\n author: string,\n category: CategoryPath,\n contentHash: string,\n domain: string,\n): string {\n const titleName = toTitleCase(name);\n\n return `# yaml-language-server: $schema=https://raw.githubusercontent.com/agents-inc/cli/main/src/schemas/custom-metadata.schema.json\ncustom: true\ndomain: ${domain}\ncategory: ${category}\nauthor: \"${author}\"\ndisplayName: ${titleName}\nslug: ${name}\ncliDescription: Brief description\nusageGuidance: Use when <guidance>.\ncontentHash: ${contentHash}\n`;\n}\n\nconst DEFAULT_CATEGORY_ORDER = 99;\n\nconst CATEGORIES_TS_COMMENT = \"// Skill category definitions\";\nconst RULES_TS_COMMENT = \"// Skill rules configuration\";\n\nfunction formatTsExport(comment: string, data: unknown): string {\n const body = JSON.stringify(data, null, 2);\n return `${comment}\\nexport default ${body};\\n`;\n}\n\nfunction buildCategoryEntry(category: CategoryPath, domain: string): Record<string, unknown> {\n const categoryPart = category.includes(\"-\")\n ? category.slice(category.indexOf(\"-\") + 1)\n : category;\n const entry: Record<string, unknown> = {\n id: category,\n displayName: toTitleCase(categoryPart),\n description: `Skills for ${toTitleCase(categoryPart)}`,\n exclusive: true,\n required: false,\n order: DEFAULT_CATEGORY_ORDER,\n custom: true,\n };\n entry.domain = domain;\n return entry;\n}\n\nexport function generateSkillCategoriesTs(category: CategoryPath, domain: string): string {\n const entry = buildCategoryEntry(category, domain);\n const data = {\n version: DEFAULT_VERSION,\n categories: {\n [category]: entry,\n },\n };\n return formatTsExport(CATEGORIES_TS_COMMENT, data);\n}\n\nexport function generateSkillRulesTs(): string {\n const data = {\n version: DEFAULT_VERSION,\n relationships: {\n conflicts: [],\n discourages: [],\n recommends: [],\n requires: [],\n alternatives: [],\n },\n };\n return formatTsExport(RULES_TS_COMMENT, data);\n}\n\n// ---------------------------------------------------------------------------\n// Scaffold operation\n// ---------------------------------------------------------------------------\n\n/**\n * Writes SKILL.md and metadata.yaml files for a new skill scaffold.\n *\n * Generates SKILL.md first, computes the content hash from the written file,\n * then generates and writes metadata.yaml with the hash included.\n *\n * Does NOT check whether the directory exists or handle --force logic;\n * the calling command is responsible for that.\n */\nexport async function scaffoldSkillFiles(\n options: ScaffoldSkillOptions,\n): Promise<ScaffoldSkillResult> {\n const { name, author, category, domain, skillDir } = options;\n\n const skillMdContent = generateSkillMd(name);\n const skillMdPath = path.join(skillDir, STANDARD_FILES.SKILL_MD);\n const metadataPath = path.join(skillDir, STANDARD_FILES.METADATA_YAML);\n\n await writeFile(skillMdPath, skillMdContent);\n\n const contentHash = await computeSkillFolderHash(skillDir);\n const metadataContent = generateMetadataYaml(name, author, category, contentHash, domain);\n await writeFile(metadataPath, metadataContent);\n\n return { skillMdPath, metadataPath, contentHash };\n}\n\n// ---------------------------------------------------------------------------\n// Registry update operation\n// ---------------------------------------------------------------------------\n\n/**\n * Updates skill-categories.ts and skill-rules.ts registry files in a\n * marketplace project.\n *\n * - If skill-categories.ts exists, appends the new category (skips if already present).\n * - If skill-categories.ts does not exist, creates it with the new category.\n * - If skill-rules.ts does not exist, creates a default one.\n *\n * Returns what was created/updated so the command can log appropriately.\n */\nexport async function updateSkillRegistryConfig(\n options: RegistryUpdateOptions,\n): Promise<RegistryUpdateResult> {\n const { projectRoot, category, domain } = options;\n\n const categoriesPath = path.join(projectRoot, SKILL_CATEGORIES_PATH);\n const rulesPath = path.join(projectRoot, SKILL_RULES_PATH);\n\n let categoriesCreated = false;\n let categoriesUpdated = false;\n let rulesCreated = false;\n\n // Update skill-categories.ts\n if (await fileExists(categoriesPath)) {\n // Boundary cast: loadConfig returns unknown structure from TS file\n const parsed = (await loadConfig<Record<string, unknown>>(categoriesPath)) ?? {};\n const categories = (parsed.categories ?? {}) as Record<string, unknown>;\n if (!categories[category]) {\n categories[category] = buildCategoryEntry(category, domain);\n parsed.categories = categories;\n await writeFile(categoriesPath, formatTsExport(CATEGORIES_TS_COMMENT, parsed));\n verbose(`Added category '${category}' to ${SKILL_CATEGORIES_PATH}`);\n categoriesUpdated = true;\n }\n } else {\n await ensureDir(path.dirname(categoriesPath));\n await writeFile(categoriesPath, generateSkillCategoriesTs(category, domain));\n verbose(`Created ${SKILL_CATEGORIES_PATH}`);\n categoriesCreated = true;\n }\n\n // Create skill-rules.ts if it doesn't exist (no aliases to update -- slugs are in metadata.yaml)\n if (!(await fileExists(rulesPath))) {\n await ensureDir(path.dirname(rulesPath));\n await writeFile(rulesPath, generateSkillRulesTs());\n verbose(`Created ${SKILL_RULES_PATH}`);\n rulesCreated = true;\n }\n\n return { categoriesCreated, categoriesUpdated, rulesCreated };\n}\n"],"mappings":"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","names":[]}
|