@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
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
DEFAULT_VERSION
|
|
4
|
+
} from "./chunk-6PGL2XMY.js";
|
|
5
|
+
import {
|
|
6
|
+
init_esm_shims
|
|
7
|
+
} from "./chunk-DHET7RCE.js";
|
|
8
|
+
|
|
9
|
+
// src/cli/lib/skills/generators.ts
|
|
10
|
+
init_esm_shims();
|
|
11
|
+
function toTitleCase(kebabCase) {
|
|
12
|
+
return kebabCase.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
|
|
13
|
+
}
|
|
14
|
+
var DEFAULT_CATEGORY_ORDER = 99;
|
|
15
|
+
var CATEGORIES_TS_COMMENT = "// Skill category definitions";
|
|
16
|
+
var RULES_TS_COMMENT = "// Skill rules configuration";
|
|
17
|
+
function formatTsExport(comment, data) {
|
|
18
|
+
const body = JSON.stringify(data, null, 2);
|
|
19
|
+
return `${comment}
|
|
20
|
+
export default ${body};
|
|
21
|
+
`;
|
|
22
|
+
}
|
|
23
|
+
function buildCategoryEntry(category, domain) {
|
|
24
|
+
const categoryPart = category.includes("-") ? category.slice(category.indexOf("-") + 1) : category;
|
|
25
|
+
const entry = {
|
|
26
|
+
id: category,
|
|
27
|
+
displayName: toTitleCase(categoryPart),
|
|
28
|
+
description: `Skills for ${toTitleCase(categoryPart)}`,
|
|
29
|
+
exclusive: true,
|
|
30
|
+
required: false,
|
|
31
|
+
order: DEFAULT_CATEGORY_ORDER,
|
|
32
|
+
custom: true
|
|
33
|
+
};
|
|
34
|
+
entry.domain = domain;
|
|
35
|
+
return entry;
|
|
36
|
+
}
|
|
37
|
+
function generateSkillCategoriesTs(category, domain) {
|
|
38
|
+
const entry = buildCategoryEntry(category, domain);
|
|
39
|
+
const data = {
|
|
40
|
+
version: DEFAULT_VERSION,
|
|
41
|
+
categories: {
|
|
42
|
+
[category]: entry
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
return formatTsExport(CATEGORIES_TS_COMMENT, data);
|
|
46
|
+
}
|
|
47
|
+
function generateSkillRulesTs() {
|
|
48
|
+
const data = {
|
|
49
|
+
version: DEFAULT_VERSION,
|
|
50
|
+
relationships: {
|
|
51
|
+
conflicts: [],
|
|
52
|
+
discourages: [],
|
|
53
|
+
recommends: [],
|
|
54
|
+
requires: [],
|
|
55
|
+
alternatives: []
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
return formatTsExport(RULES_TS_COMMENT, data);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export {
|
|
62
|
+
toTitleCase,
|
|
63
|
+
formatTsExport,
|
|
64
|
+
buildCategoryEntry,
|
|
65
|
+
generateSkillCategoriesTs,
|
|
66
|
+
generateSkillRulesTs
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=chunk-J6PI73YV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/lib/skills/generators.ts"],"sourcesContent":["import { DEFAULT_VERSION } from \"../../consts\";\nimport type { CategoryPath } from \"../../types/index\";\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\nconst DEFAULT_CATEGORY_ORDER = 99;\n\nconst CATEGORIES_TS_COMMENT = \"// Skill category definitions\";\nconst RULES_TS_COMMENT = \"// Skill rules configuration\";\n\nexport function formatTsExport(comment: string, data: unknown): string {\n const body = JSON.stringify(data, null, 2);\n return `${comment}\\nexport default ${body};\\n`;\n}\n\nexport function buildCategoryEntry(\n category: CategoryPath,\n domain: string,\n): 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"],"mappings":";;;;;;;;;AAAA;AAGO,SAAS,YAAY,WAA2B;AACrD,SAAO,UACJ,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EAC1D,KAAK,GAAG;AACb;AAEA,IAAM,yBAAyB;AAE/B,IAAM,wBAAwB;AAC9B,IAAM,mBAAmB;AAElB,SAAS,eAAe,SAAiB,MAAuB;AACrE,QAAM,OAAO,KAAK,UAAU,MAAM,MAAM,CAAC;AACzC,SAAO,GAAG,OAAO;AAAA,iBAAoB,IAAI;AAAA;AAC3C;AAEO,SAAS,mBACd,UACA,QACyB;AACzB,QAAM,eAAe,SAAS,SAAS,GAAG,IACtC,SAAS,MAAM,SAAS,QAAQ,GAAG,IAAI,CAAC,IACxC;AACJ,QAAM,QAAiC;AAAA,IACrC,IAAI;AAAA,IACJ,aAAa,YAAY,YAAY;AAAA,IACrC,aAAa,cAAc,YAAY,YAAY,CAAC;AAAA,IACpD,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AACA,QAAM,SAAS;AACf,SAAO;AACT;AAEO,SAAS,0BAA0B,UAAwB,QAAwB;AACxF,QAAM,QAAQ,mBAAmB,UAAU,MAAM;AACjD,QAAM,OAAO;AAAA,IACX,SAAS;AAAA,IACT,YAAY;AAAA,MACV,CAAC,QAAQ,GAAG;AAAA,IACd;AAAA,EACF;AACA,SAAO,eAAe,uBAAuB,IAAI;AACnD;AAEO,SAAS,uBAA+B;AAC7C,QAAM,OAAO;AAAA,IACX,SAAS;AAAA,IACT,eAAe;AAAA,MACb,WAAW,CAAC;AAAA,MACZ,aAAa,CAAC;AAAA,MACd,YAAY,CAAC;AAAA,MACb,UAAU,CAAC;AAAA,MACX,cAAc,CAAC;AAAA,IACjB;AAAA,EACF;AACA,SAAO,eAAe,kBAAkB,IAAI;AAC9C;","names":[]}
|
package/dist/commands/compile.js
CHANGED
|
@@ -9,10 +9,8 @@ import {
|
|
|
9
9
|
detectBothInstallations,
|
|
10
10
|
discoverInstalledSkills,
|
|
11
11
|
loadAgentDefs
|
|
12
|
-
} from "../chunk-
|
|
12
|
+
} from "../chunk-5UJJQFET.js";
|
|
13
13
|
import "../chunk-N6A7A4RA.js";
|
|
14
|
-
import "../chunk-O5ZWS26C.js";
|
|
15
|
-
import "../chunk-XQK4S22C.js";
|
|
16
14
|
import "../chunk-FBZR46GC.js";
|
|
17
15
|
import {
|
|
18
16
|
resolveSource
|
|
@@ -62,57 +60,65 @@ var Compile = class _Compile extends BaseCommand {
|
|
|
62
60
|
const { flags } = await this.parse(_Compile);
|
|
63
61
|
setVerbose(flags.verbose);
|
|
64
62
|
const cwd = process.cwd();
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
63
|
+
const installations = await this.detectInstallations(cwd);
|
|
64
|
+
await this.resolveAndLogSource(flags.source);
|
|
65
|
+
const agentDefs = await this.loadAgentDefsOrFail(flags, cwd);
|
|
66
|
+
await this.compileAllScopes(installations, agentDefs, cwd);
|
|
67
|
+
}
|
|
68
|
+
async detectInstallations(cwd) {
|
|
69
|
+
const installations = await detectBothInstallations(cwd);
|
|
70
|
+
if (!installations.global && !installations.project) {
|
|
72
71
|
this.error(ERROR_MESSAGES.NO_INSTALLATION, {
|
|
73
72
|
exit: EXIT_CODES.ERROR
|
|
74
73
|
});
|
|
75
74
|
}
|
|
75
|
+
return installations;
|
|
76
|
+
}
|
|
77
|
+
async resolveAndLogSource(sourceFlag) {
|
|
76
78
|
this.log(STATUS_MESSAGES.RESOLVING_SOURCE);
|
|
77
79
|
try {
|
|
78
|
-
const sourceConfig = await resolveSource(
|
|
80
|
+
const sourceConfig = await resolveSource(sourceFlag);
|
|
79
81
|
this.log(`Source: ${sourceConfig.sourceOrigin}`);
|
|
80
82
|
} catch (error) {
|
|
81
83
|
this.log(ERROR_MESSAGES.FAILED_RESOLVE_SOURCE);
|
|
82
84
|
this.handleError(error);
|
|
83
85
|
}
|
|
86
|
+
}
|
|
87
|
+
async loadAgentDefsOrFail(flags, cwd) {
|
|
84
88
|
this.log(
|
|
85
89
|
flags["agent-source"] ? STATUS_MESSAGES.FETCHING_AGENT_PARTIALS : STATUS_MESSAGES.LOADING_AGENT_PARTIALS
|
|
86
90
|
);
|
|
87
|
-
let agentDefs;
|
|
88
91
|
try {
|
|
89
92
|
const defs = await loadAgentDefs(flags["agent-source"], { projectDir: cwd });
|
|
90
93
|
this.log(flags["agent-source"] ? "Agent partials fetched" : "Agent partials loaded");
|
|
91
94
|
verbose(` Agents: ${defs.agentSourcePaths.agentsDir}`);
|
|
92
95
|
verbose(` Templates: ${defs.agentSourcePaths.templatesDir}`);
|
|
93
|
-
|
|
96
|
+
return defs;
|
|
94
97
|
} catch (error) {
|
|
95
98
|
this.log(ERROR_MESSAGES.FAILED_LOAD_AGENT_PARTIALS);
|
|
96
|
-
|
|
99
|
+
this.handleError(error);
|
|
97
100
|
}
|
|
101
|
+
}
|
|
102
|
+
async compileAllScopes(installations, agentDefs, cwd) {
|
|
103
|
+
const homeDir = os.homedir();
|
|
98
104
|
let totalPassesWithSkills = 0;
|
|
99
|
-
if (
|
|
105
|
+
if (installations.global) {
|
|
100
106
|
const hadSkills = await this.runCompilePass({
|
|
101
107
|
label: "Global",
|
|
102
108
|
projectDir: homeDir,
|
|
103
|
-
installation:
|
|
109
|
+
installation: installations.global,
|
|
104
110
|
sourcePath: agentDefs.sourcePath,
|
|
105
|
-
scopeFilter:
|
|
111
|
+
scopeFilter: installations.hasBoth ? "global" : void 0
|
|
106
112
|
});
|
|
107
113
|
if (hadSkills) totalPassesWithSkills++;
|
|
108
114
|
}
|
|
109
|
-
if (
|
|
115
|
+
if (installations.project) {
|
|
110
116
|
const hadSkills = await this.runCompilePass({
|
|
111
117
|
label: "Project",
|
|
112
118
|
projectDir: cwd,
|
|
113
|
-
installation:
|
|
119
|
+
installation: installations.project,
|
|
114
120
|
sourcePath: agentDefs.sourcePath,
|
|
115
|
-
scopeFilter:
|
|
121
|
+
scopeFilter: installations.hasBoth ? "project" : void 0
|
|
116
122
|
});
|
|
117
123
|
if (hadSkills) totalPassesWithSkills++;
|
|
118
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/commands/compile.ts"],"sourcesContent":["import { Flags } from \"@oclif/core\";\nimport os from \"os\";\nimport { BaseCommand } from \"../base-command\";\nimport { setVerbose, verbose } from \"../utils/logger\";\nimport {\n detectBothInstallations,\n loadAgentDefs,\n compileAgents,\n discoverInstalledSkills,\n type DiscoveredSkills,\n} from \"../lib/operations\";\nimport { resolveSource } from \"../lib/configuration\";\nimport { CLI_BIN_NAME } from \"../consts\";\nimport { EXIT_CODES } from \"../lib/exit-codes\";\nimport { ERROR_MESSAGES, STATUS_MESSAGES, INFO_MESSAGES } from \"../utils/messages\";\nimport { type Installation } from \"../lib/installation\";\n\nexport default class Compile extends BaseCommand {\n static summary = \"Compile agents using local skills and agent definitions\";\n\n static description =\n \"Compile agents with resolved skill references. Compiles to the Claude plugin directory.\";\n\n static examples = [\n \"<%= config.bin %> <%= command.id %>\",\n \"<%= config.bin %> <%= command.id %> --verbose\",\n ];\n\n static flags = {\n ...BaseCommand.baseFlags,\n verbose: Flags.boolean({\n char: \"v\",\n description: \"Enable verbose logging\",\n default: false,\n }),\n \"agent-source\": Flags.string({\n description: \"Remote agent partials source (default: local CLI)\",\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Compile);\n\n setVerbose(flags.verbose);\n\n const cwd = process.cwd();\n const homeDir = os.homedir();\n\n const {\n global: globalInstallation,\n project: projectInstallation,\n hasBoth: hasBothScopes,\n } = await detectBothInstallations(cwd);\n\n if (!globalInstallation && !projectInstallation) {\n this.error(ERROR_MESSAGES.NO_INSTALLATION, {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n // Resolve source\n this.log(STATUS_MESSAGES.RESOLVING_SOURCE);\n try {\n const sourceConfig = await resolveSource(flags.source);\n this.log(`Source: ${sourceConfig.sourceOrigin}`);\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_RESOLVE_SOURCE);\n this.handleError(error);\n }\n\n // Load agent definitions\n this.log(\n flags[\"agent-source\"]\n ? STATUS_MESSAGES.FETCHING_AGENT_PARTIALS\n : STATUS_MESSAGES.LOADING_AGENT_PARTIALS,\n );\n let agentDefs;\n try {\n const defs = await loadAgentDefs(flags[\"agent-source\"], { projectDir: cwd });\n this.log(flags[\"agent-source\"] ? \"Agent partials fetched\" : \"Agent partials loaded\");\n verbose(` Agents: ${defs.agentSourcePaths.agentsDir}`);\n verbose(` Templates: ${defs.agentSourcePaths.templatesDir}`);\n agentDefs = defs;\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_LOAD_AGENT_PARTIALS);\n return this.handleError(error);\n }\n\n let totalPassesWithSkills = 0;\n\n // When both installations exist, filter each pass to its own scope to prevent\n // the project pass from overwriting global agents with zero-skill versions\n // (the project config's stack only has project agent entries).\n if (globalInstallation) {\n const hadSkills = await this.runCompilePass({\n label: \"Global\",\n projectDir: homeDir,\n installation: globalInstallation,\n sourcePath: agentDefs.sourcePath,\n scopeFilter: hasBothScopes ? \"global\" : undefined,\n });\n if (hadSkills) totalPassesWithSkills++;\n }\n\n if (projectInstallation) {\n const hadSkills = await this.runCompilePass({\n label: \"Project\",\n projectDir: cwd,\n installation: projectInstallation,\n sourcePath: agentDefs.sourcePath,\n scopeFilter: hasBothScopes ? \"project\" : undefined,\n });\n if (hadSkills) totalPassesWithSkills++;\n }\n\n if (totalPassesWithSkills === 0) {\n this.error(\n `No skills found. Add skills with '${CLI_BIN_NAME} add <skill>' or create in .claude/skills/.`,\n { exit: EXIT_CODES.ERROR },\n );\n }\n }\n\n private async discoverAllSkills(projectDir: string): Promise<DiscoveredSkills> {\n this.log(STATUS_MESSAGES.DISCOVERING_SKILLS);\n const result = await discoverInstalledSkills(projectDir);\n\n if (result.totalSkillCount === 0) {\n return result;\n }\n\n if (result.pluginSkillCount > 0 && result.totalSkillCount > result.pluginSkillCount) {\n const localCount = result.totalSkillCount - result.pluginSkillCount;\n this.log(\n `Discovered ${result.totalSkillCount} skills (${result.pluginSkillCount} from plugins, ${localCount} local)`,\n );\n } else if (result.pluginSkillCount > 0) {\n this.log(`Discovered ${result.pluginSkillCount} skills from plugins`);\n } else {\n this.log(`Discovered ${result.totalSkillCount} local skills`);\n }\n\n return result;\n }\n\n private async runCompilePass(params: {\n label: string;\n projectDir: string;\n installation: Installation;\n sourcePath: string;\n scopeFilter?: \"project\" | \"global\";\n }): Promise<boolean> {\n const { label, projectDir, installation, sourcePath, scopeFilter } = params;\n\n this.log(\"\");\n this.log(`Compiling ${label.toLowerCase()} agents...`);\n this.log(\"\");\n\n verbose(` Project: ${projectDir}`);\n verbose(` Agents: ${installation.agentsDir}`);\n\n const { allSkills, totalSkillCount } = await this.discoverAllSkills(projectDir);\n\n if (totalSkillCount === 0) {\n this.log(`No skills found for ${label.toLowerCase()} pass, skipping`);\n return false;\n }\n\n this.log(STATUS_MESSAGES.RECOMPILING_AGENTS);\n try {\n const recompileResult = await compileAgents({\n projectDir,\n sourcePath,\n skills: allSkills,\n pluginDir: projectDir,\n outputDir: installation.agentsDir,\n scopeFilter,\n });\n\n if (recompileResult.failed.length > 0) {\n this.log(\n `Recompiled ${recompileResult.compiled.length} ${label.toLowerCase()} agents (${recompileResult.failed.length} failed)`,\n );\n for (const warning of recompileResult.warnings) {\n this.warn(warning);\n }\n } else if (recompileResult.compiled.length > 0) {\n this.log(`Recompiled ${recompileResult.compiled.length} ${label.toLowerCase()} agents`);\n } else {\n this.log(INFO_MESSAGES.NO_AGENTS_TO_RECOMPILE);\n }\n\n if (recompileResult.compiled.length > 0) {\n verbose(` Compiled: ${recompileResult.compiled.join(\", \")}`);\n }\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_COMPILE_AGENTS);\n this.handleError(error);\n }\n\n this.log(\"\");\n this.logSuccess(`${label} compile complete!`);\n this.log(\"\");\n\n return true;\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/compile.ts"],"sourcesContent":["import { Flags } from \"@oclif/core\";\nimport os from \"os\";\nimport { BaseCommand } from \"../base-command\";\nimport { setVerbose, verbose } from \"../utils/logger\";\nimport {\n detectBothInstallations,\n type BothInstallations,\n loadAgentDefs,\n type AgentDefs,\n compileAgents,\n discoverInstalledSkills,\n type DiscoveredSkills,\n} from \"../lib/operations\";\nimport { resolveSource } from \"../lib/configuration\";\nimport { CLI_BIN_NAME } from \"../consts\";\nimport { EXIT_CODES } from \"../lib/exit-codes\";\nimport { ERROR_MESSAGES, STATUS_MESSAGES, INFO_MESSAGES } from \"../utils/messages\";\nimport { type Installation } from \"../lib/installation\";\n\nexport default class Compile extends BaseCommand {\n static summary = \"Compile agents using local skills and agent definitions\";\n\n static description =\n \"Compile agents with resolved skill references. Compiles to the Claude plugin directory.\";\n\n static examples = [\n \"<%= config.bin %> <%= command.id %>\",\n \"<%= config.bin %> <%= command.id %> --verbose\",\n ];\n\n static flags = {\n ...BaseCommand.baseFlags,\n verbose: Flags.boolean({\n char: \"v\",\n description: \"Enable verbose logging\",\n default: false,\n }),\n \"agent-source\": Flags.string({\n description: \"Remote agent partials source (default: local CLI)\",\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Compile);\n setVerbose(flags.verbose);\n const cwd = process.cwd();\n\n const installations = await this.detectInstallations(cwd);\n await this.resolveAndLogSource(flags.source);\n const agentDefs = await this.loadAgentDefsOrFail(flags, cwd);\n await this.compileAllScopes(installations, agentDefs, cwd);\n }\n\n private async detectInstallations(cwd: string): Promise<BothInstallations> {\n const installations = await detectBothInstallations(cwd);\n\n if (!installations.global && !installations.project) {\n this.error(ERROR_MESSAGES.NO_INSTALLATION, {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n return installations;\n }\n\n private async resolveAndLogSource(sourceFlag?: string): Promise<void> {\n this.log(STATUS_MESSAGES.RESOLVING_SOURCE);\n try {\n const sourceConfig = await resolveSource(sourceFlag);\n this.log(`Source: ${sourceConfig.sourceOrigin}`);\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_RESOLVE_SOURCE);\n this.handleError(error);\n }\n }\n\n private async loadAgentDefsOrFail(\n flags: { \"agent-source\"?: string },\n cwd: string,\n ): Promise<AgentDefs> {\n this.log(\n flags[\"agent-source\"]\n ? STATUS_MESSAGES.FETCHING_AGENT_PARTIALS\n : STATUS_MESSAGES.LOADING_AGENT_PARTIALS,\n );\n try {\n const defs = await loadAgentDefs(flags[\"agent-source\"], { projectDir: cwd });\n this.log(flags[\"agent-source\"] ? \"Agent partials fetched\" : \"Agent partials loaded\");\n verbose(` Agents: ${defs.agentSourcePaths.agentsDir}`);\n verbose(` Templates: ${defs.agentSourcePaths.templatesDir}`);\n return defs;\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_LOAD_AGENT_PARTIALS);\n this.handleError(error);\n }\n }\n\n private async compileAllScopes(\n installations: BothInstallations,\n agentDefs: AgentDefs,\n cwd: string,\n ): Promise<void> {\n const homeDir = os.homedir();\n let totalPassesWithSkills = 0;\n\n // When both installations exist, filter each pass to its own scope to prevent\n // the project pass from overwriting global agents with zero-skill versions\n // (the project config's stack only has project agent entries).\n if (installations.global) {\n const hadSkills = await this.runCompilePass({\n label: \"Global\",\n projectDir: homeDir,\n installation: installations.global,\n sourcePath: agentDefs.sourcePath,\n scopeFilter: installations.hasBoth ? \"global\" : undefined,\n });\n if (hadSkills) totalPassesWithSkills++;\n }\n\n if (installations.project) {\n const hadSkills = await this.runCompilePass({\n label: \"Project\",\n projectDir: cwd,\n installation: installations.project,\n sourcePath: agentDefs.sourcePath,\n scopeFilter: installations.hasBoth ? \"project\" : undefined,\n });\n if (hadSkills) totalPassesWithSkills++;\n }\n\n if (totalPassesWithSkills === 0) {\n this.error(\n `No skills found. Add skills with '${CLI_BIN_NAME} add <skill>' or create in .claude/skills/.`,\n { exit: EXIT_CODES.ERROR },\n );\n }\n }\n\n private async discoverAllSkills(projectDir: string): Promise<DiscoveredSkills> {\n this.log(STATUS_MESSAGES.DISCOVERING_SKILLS);\n const result = await discoverInstalledSkills(projectDir);\n\n if (result.totalSkillCount === 0) {\n return result;\n }\n\n if (result.pluginSkillCount > 0 && result.totalSkillCount > result.pluginSkillCount) {\n const localCount = result.totalSkillCount - result.pluginSkillCount;\n this.log(\n `Discovered ${result.totalSkillCount} skills (${result.pluginSkillCount} from plugins, ${localCount} local)`,\n );\n } else if (result.pluginSkillCount > 0) {\n this.log(`Discovered ${result.pluginSkillCount} skills from plugins`);\n } else {\n this.log(`Discovered ${result.totalSkillCount} local skills`);\n }\n\n return result;\n }\n\n private async runCompilePass(params: {\n label: string;\n projectDir: string;\n installation: Installation;\n sourcePath: string;\n scopeFilter?: \"project\" | \"global\";\n }): Promise<boolean> {\n const { label, projectDir, installation, sourcePath, scopeFilter } = params;\n\n this.log(\"\");\n this.log(`Compiling ${label.toLowerCase()} agents...`);\n this.log(\"\");\n\n verbose(` Project: ${projectDir}`);\n verbose(` Agents: ${installation.agentsDir}`);\n\n const { allSkills, totalSkillCount } = await this.discoverAllSkills(projectDir);\n\n if (totalSkillCount === 0) {\n this.log(`No skills found for ${label.toLowerCase()} pass, skipping`);\n return false;\n }\n\n this.log(STATUS_MESSAGES.RECOMPILING_AGENTS);\n try {\n const recompileResult = await compileAgents({\n projectDir,\n sourcePath,\n skills: allSkills,\n pluginDir: projectDir,\n outputDir: installation.agentsDir,\n scopeFilter,\n });\n\n if (recompileResult.failed.length > 0) {\n this.log(\n `Recompiled ${recompileResult.compiled.length} ${label.toLowerCase()} agents (${recompileResult.failed.length} failed)`,\n );\n for (const warning of recompileResult.warnings) {\n this.warn(warning);\n }\n } else if (recompileResult.compiled.length > 0) {\n this.log(`Recompiled ${recompileResult.compiled.length} ${label.toLowerCase()} agents`);\n } else {\n this.log(INFO_MESSAGES.NO_AGENTS_TO_RECOMPILE);\n }\n\n if (recompileResult.compiled.length > 0) {\n verbose(` Compiled: ${recompileResult.compiled.join(\", \")}`);\n }\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_COMPILE_AGENTS);\n this.handleError(error);\n }\n\n this.log(\"\");\n this.logSuccess(`${label} compile complete!`);\n this.log(\"\");\n\n return true;\n }\n}\n"],"mappings":"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","names":[]}
|