agentinit 1.6.0 → 1.8.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 +40 -0
- package/README.md +220 -114
- package/dist/agents/Agent.d.ts +44 -0
- package/dist/agents/Agent.d.ts.map +1 -1
- package/dist/agents/Agent.js +111 -22
- package/dist/agents/Agent.js.map +1 -1
- package/dist/agents/AiderAgent.d.ts +9 -0
- package/dist/agents/AiderAgent.d.ts.map +1 -0
- package/dist/agents/AiderAgent.js +135 -0
- package/dist/agents/AiderAgent.js.map +1 -0
- package/dist/agents/ClaudeAgent.d.ts +4 -0
- package/dist/agents/ClaudeAgent.d.ts.map +1 -1
- package/dist/agents/ClaudeAgent.js +33 -18
- package/dist/agents/ClaudeAgent.js.map +1 -1
- package/dist/agents/ClaudeDesktopAgent.d.ts +5 -0
- package/dist/agents/ClaudeDesktopAgent.d.ts.map +1 -1
- package/dist/agents/ClaudeDesktopAgent.js +31 -1
- package/dist/agents/ClaudeDesktopAgent.js.map +1 -1
- package/dist/agents/ClineAgent.d.ts +8 -0
- package/dist/agents/ClineAgent.d.ts.map +1 -0
- package/dist/agents/ClineAgent.js +42 -0
- package/dist/agents/ClineAgent.js.map +1 -0
- package/dist/agents/CodexCliAgent.d.ts +4 -0
- package/dist/agents/CodexCliAgent.d.ts.map +1 -1
- package/dist/agents/CodexCliAgent.js +38 -8
- package/dist/agents/CodexCliAgent.js.map +1 -1
- package/dist/agents/CopilotAgent.d.ts +9 -0
- package/dist/agents/CopilotAgent.d.ts.map +1 -0
- package/dist/agents/CopilotAgent.js +131 -0
- package/dist/agents/CopilotAgent.js.map +1 -0
- package/dist/agents/CursorAgent.d.ts +4 -4
- package/dist/agents/CursorAgent.d.ts.map +1 -1
- package/dist/agents/CursorAgent.js +32 -43
- package/dist/agents/CursorAgent.js.map +1 -1
- package/dist/agents/DroidAgent.d.ts +5 -0
- package/dist/agents/DroidAgent.d.ts.map +1 -1
- package/dist/agents/DroidAgent.js +37 -18
- package/dist/agents/DroidAgent.js.map +1 -1
- package/dist/agents/GeminiCliAgent.d.ts +4 -0
- package/dist/agents/GeminiCliAgent.d.ts.map +1 -1
- package/dist/agents/GeminiCliAgent.js +37 -8
- package/dist/agents/GeminiCliAgent.js.map +1 -1
- package/dist/agents/MarkdownRulesAgent.d.ts +13 -0
- package/dist/agents/MarkdownRulesAgent.d.ts.map +1 -0
- package/dist/agents/MarkdownRulesAgent.js +53 -0
- package/dist/agents/MarkdownRulesAgent.js.map +1 -0
- package/dist/agents/RooCodeAgent.d.ts +9 -0
- package/dist/agents/RooCodeAgent.d.ts.map +1 -0
- package/dist/agents/RooCodeAgent.js +131 -0
- package/dist/agents/RooCodeAgent.js.map +1 -0
- package/dist/agents/WindsurfAgent.d.ts +9 -0
- package/dist/agents/WindsurfAgent.d.ts.map +1 -0
- package/dist/agents/WindsurfAgent.js +127 -0
- package/dist/agents/WindsurfAgent.js.map +1 -0
- package/dist/agents/ZedAgent.d.ts +9 -0
- package/dist/agents/ZedAgent.d.ts.map +1 -0
- package/dist/agents/ZedAgent.js +127 -0
- package/dist/agents/ZedAgent.js.map +1 -0
- package/dist/cli.js +29992 -11107
- package/dist/cli.js.map +1 -1
- package/dist/commands/apply.d.ts +10 -0
- package/dist/commands/apply.d.ts.map +1 -1
- package/dist/commands/apply.js +136 -5
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/detect.d.ts.map +1 -1
- package/dist/commands/detect.js +25 -0
- package/dist/commands/detect.js.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp.d.ts +2 -7
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +541 -110
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/plugins.d.ts +3 -0
- package/dist/commands/plugins.d.ts.map +1 -0
- package/dist/commands/plugins.js +309 -0
- package/dist/commands/plugins.js.map +1 -0
- package/dist/commands/revert.d.ts +7 -0
- package/dist/commands/revert.d.ts.map +1 -0
- package/dist/commands/revert.js +48 -0
- package/dist/commands/revert.js.map +1 -0
- package/dist/commands/rules.d.ts +3 -0
- package/dist/commands/rules.d.ts.map +1 -0
- package/dist/commands/rules.js +354 -0
- package/dist/commands/rules.js.map +1 -0
- package/dist/commands/skills.d.ts +3 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +179 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/sync.d.ts +1 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +18 -1
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/verifyMcp.d.ts.map +1 -1
- package/dist/commands/verifyMcp.js +27 -5
- package/dist/commands/verifyMcp.js.map +1 -1
- package/dist/constants/index.d.ts +1 -1
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +1 -1
- package/dist/constants/index.js.map +1 -1
- package/dist/constants/mcp.d.ts +1 -0
- package/dist/constants/mcp.d.ts.map +1 -1
- package/dist/constants/mcp.js +2 -0
- package/dist/constants/mcp.js.map +1 -1
- package/dist/core/agentDetector.d.ts.map +1 -1
- package/dist/core/agentDetector.js +8 -2
- package/dist/core/agentDetector.js.map +1 -1
- package/dist/core/agentManager.d.ts.map +1 -1
- package/dist/core/agentManager.js +12 -0
- package/dist/core/agentManager.js.map +1 -1
- package/dist/core/gitignoreManager.d.ts +8 -0
- package/dist/core/gitignoreManager.d.ts.map +1 -0
- package/dist/core/gitignoreManager.js +114 -0
- package/dist/core/gitignoreManager.js.map +1 -0
- package/dist/core/managedState.d.ts +42 -0
- package/dist/core/managedState.d.ts.map +1 -0
- package/dist/core/managedState.js +194 -0
- package/dist/core/managedState.js.map +1 -0
- package/dist/core/mcpClient.d.ts +124 -6
- package/dist/core/mcpClient.d.ts.map +1 -1
- package/dist/core/mcpClient.js +385 -39
- package/dist/core/mcpClient.js.map +1 -1
- package/dist/core/pluginManager.d.ts +134 -0
- package/dist/core/pluginManager.d.ts.map +1 -0
- package/dist/core/pluginManager.js +845 -0
- package/dist/core/pluginManager.js.map +1 -0
- package/dist/core/projectSkills.d.ts +19 -0
- package/dist/core/projectSkills.d.ts.map +1 -0
- package/dist/core/projectSkills.js +105 -0
- package/dist/core/projectSkills.js.map +1 -0
- package/dist/core/propagator.d.ts +8 -1
- package/dist/core/propagator.d.ts.map +1 -1
- package/dist/core/propagator.js +179 -36
- package/dist/core/propagator.js.map +1 -1
- package/dist/core/rulesApplicator.d.ts +0 -4
- package/dist/core/rulesApplicator.d.ts.map +1 -1
- package/dist/core/rulesApplicator.js +8 -39
- package/dist/core/rulesApplicator.js.map +1 -1
- package/dist/core/rulesTemplateLoader.js +2 -2
- package/dist/core/rulesTemplateLoader.js.map +1 -1
- package/dist/core/skillsManager.d.ts +61 -0
- package/dist/core/skillsManager.d.ts.map +1 -0
- package/dist/core/skillsManager.js +407 -0
- package/dist/core/skillsManager.js.map +1 -0
- package/dist/lib/utils/index.d.ts +3 -1
- package/dist/lib/utils/index.d.ts.map +1 -1
- package/dist/lib/utils/index.js +4 -1
- package/dist/lib/utils/index.js.map +1 -1
- package/dist/types/index.d.ts +24 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/jsonSchema.d.ts +31 -0
- package/dist/types/jsonSchema.d.ts.map +1 -0
- package/dist/types/jsonSchema.js +6 -0
- package/dist/types/jsonSchema.js.map +1 -0
- package/dist/types/plugins.d.ts +161 -0
- package/dist/types/plugins.d.ts.map +1 -0
- package/dist/types/plugins.js +2 -0
- package/dist/types/plugins.js.map +1 -0
- package/dist/types/skills.d.ts +50 -0
- package/dist/types/skills.d.ts.map +1 -0
- package/dist/types/skills.js +2 -0
- package/dist/types/skills.js.map +1 -0
- package/dist/utils/packageVersion.d.ts +105 -0
- package/dist/utils/packageVersion.d.ts.map +1 -0
- package/dist/utils/packageVersion.js +219 -0
- package/dist/utils/packageVersion.js.map +1 -0
- package/package.json +7 -2
- package/dist/agentinit-1.6.0.tgz +0 -0
- package/dist/registry/mcpRegistry.d.ts +0 -12
- package/dist/registry/mcpRegistry.d.ts.map +0 -1
- package/dist/registry/mcpRegistry.js +0 -114
- package/dist/registry/mcpRegistry.js.map +0 -1
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
import ora from 'ora';
|
|
2
|
+
import { green, yellow, red, cyan, dim } from 'kleur/colors';
|
|
3
|
+
import { logger } from '../utils/logger.js';
|
|
4
|
+
import { RulesParser } from '../core/rulesParser.js';
|
|
5
|
+
import { AgentManager } from '../core/agentManager.js';
|
|
6
|
+
import { TOKEN_COUNT_THRESHOLDS } from '../constants/index.js';
|
|
7
|
+
import { readFileIfExists, writeFile } from '../utils/fs.js';
|
|
8
|
+
// ── Token display helpers ──────────────────────────────────────────────────
|
|
9
|
+
function colorizeTokenCount(tokenCount) {
|
|
10
|
+
if (tokenCount <= TOKEN_COUNT_THRESHOLDS.LOW)
|
|
11
|
+
return green(tokenCount.toString());
|
|
12
|
+
if (tokenCount <= TOKEN_COUNT_THRESHOLDS.MEDIUM)
|
|
13
|
+
return yellow(tokenCount.toString());
|
|
14
|
+
return red(tokenCount.toString());
|
|
15
|
+
}
|
|
16
|
+
function colorizeTokenDiff(diff) {
|
|
17
|
+
if (diff === 0)
|
|
18
|
+
return '\u00b10';
|
|
19
|
+
if (diff > 0)
|
|
20
|
+
return green(`+${diff}`);
|
|
21
|
+
return red(`${diff}`);
|
|
22
|
+
}
|
|
23
|
+
// ── Agent / path resolution helpers ────────────────────────────────────────
|
|
24
|
+
/**
|
|
25
|
+
* Resolve target agents from CLI options.
|
|
26
|
+
* When --agent is supplied, returns only those agents.
|
|
27
|
+
* When --global is set, validates that --agent is also present.
|
|
28
|
+
* Otherwise auto-detects agents in the current project.
|
|
29
|
+
*/
|
|
30
|
+
async function resolveTargetAgents(agentManager, options, cwd) {
|
|
31
|
+
if (options.global && !options.agent?.length) {
|
|
32
|
+
logger.error('--global flag requires --agent to specify target agent(s)');
|
|
33
|
+
logger.info('Example: agentinit rules add --global --agent claude --template git');
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
if (options.agent?.length) {
|
|
37
|
+
const agents = [];
|
|
38
|
+
for (const id of options.agent) {
|
|
39
|
+
const agent = agentManager.getAgentById(id);
|
|
40
|
+
if (!agent) {
|
|
41
|
+
logger.error(`Unknown agent: ${id}`);
|
|
42
|
+
logger.info(`Supported agents: ${agentManager.getSupportedAgentIds().join(', ')}`);
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
if (options.global && !agent.supportsGlobalRules()) {
|
|
46
|
+
logger.error(`Agent ${agent.name} does not support global rules`);
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
agents.push(agent);
|
|
50
|
+
}
|
|
51
|
+
return agents;
|
|
52
|
+
}
|
|
53
|
+
// Auto-detect
|
|
54
|
+
const detected = await agentManager.detectAgents(cwd);
|
|
55
|
+
if (detected.length === 0) {
|
|
56
|
+
logger.warning('No AI coding agents detected in this project');
|
|
57
|
+
logger.info('Supported agents:');
|
|
58
|
+
agentManager.getAllAgents().forEach(a => {
|
|
59
|
+
logger.info(` - ${a.name} (${a.id})`);
|
|
60
|
+
});
|
|
61
|
+
logger.info('');
|
|
62
|
+
logger.info('To target a specific agent, use: --agent <agent-id>');
|
|
63
|
+
process.exit(0);
|
|
64
|
+
}
|
|
65
|
+
return detected.map(d => d.agent);
|
|
66
|
+
}
|
|
67
|
+
function getRulesConfigPath(agent, projectPath, isGlobal) {
|
|
68
|
+
return isGlobal ? agent.getGlobalRulesPath() : agent.getProjectRulesPath(projectPath);
|
|
69
|
+
}
|
|
70
|
+
function buildAppliedRules(sections) {
|
|
71
|
+
const merged = sections.flatMap(section => section.rules);
|
|
72
|
+
return {
|
|
73
|
+
templateRules: merged,
|
|
74
|
+
rawRules: [],
|
|
75
|
+
fileRules: [],
|
|
76
|
+
remoteRules: [],
|
|
77
|
+
merged,
|
|
78
|
+
sections,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
// ── Command registration ───────────────────────────────────────────────────
|
|
82
|
+
export function registerRulesCommand(program) {
|
|
83
|
+
const rules = program
|
|
84
|
+
.command('rules')
|
|
85
|
+
.description('Manage agent rules');
|
|
86
|
+
// ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
|
|
87
|
+
// rules add
|
|
88
|
+
// ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
|
|
89
|
+
rules
|
|
90
|
+
.command('add')
|
|
91
|
+
.description('Add rules to agent configuration')
|
|
92
|
+
.option('-t, --template <templates...>', 'Rule templates to apply (comma-separated values accepted)')
|
|
93
|
+
.option('-r, --raw <rules...>', 'Raw rule strings')
|
|
94
|
+
.option('-f, --file <path>', 'Load rules from a file')
|
|
95
|
+
.option('--remote <url>', 'Load rules from a remote URL')
|
|
96
|
+
.option('--auth <token>', 'Authentication token for remote rules (Bearer token)')
|
|
97
|
+
.option('-a, --agent <agents...>', 'Target specific agent(s)')
|
|
98
|
+
.option('-g, --global', 'Apply rules globally')
|
|
99
|
+
.action(async (options) => {
|
|
100
|
+
logger.title('📏 AgentInit - Rules');
|
|
101
|
+
const cwd = process.cwd();
|
|
102
|
+
const isGlobal = !!options.global;
|
|
103
|
+
// 1. Build RulesConfig from options
|
|
104
|
+
const templates = [];
|
|
105
|
+
if (options.template) {
|
|
106
|
+
for (const val of options.template) {
|
|
107
|
+
templates.push(...val.split(',').map((t) => t.trim()).filter(Boolean));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const rulesConfig = {
|
|
111
|
+
templates,
|
|
112
|
+
rawRules: options.raw || [],
|
|
113
|
+
};
|
|
114
|
+
if (options.file) {
|
|
115
|
+
rulesConfig.fileRules = options.file;
|
|
116
|
+
}
|
|
117
|
+
if (options.remote) {
|
|
118
|
+
const remote = { url: options.remote };
|
|
119
|
+
if (options.auth)
|
|
120
|
+
remote.auth = options.auth;
|
|
121
|
+
rulesConfig.remoteRules = remote;
|
|
122
|
+
}
|
|
123
|
+
if (templates.length === 0 && rulesConfig.rawRules.length === 0 && !rulesConfig.fileRules && !rulesConfig.remoteRules) {
|
|
124
|
+
logger.info('No rules specified. Use one of:');
|
|
125
|
+
logger.info(' --template <templates...> Rule templates (git, write_docs, use_git_worktrees, use_subagents, use_linter, write_tests)');
|
|
126
|
+
logger.info(' --raw <rules...> Raw rule strings');
|
|
127
|
+
logger.info(' --file <path> Load rules from a file');
|
|
128
|
+
logger.info(' --remote <url> Load rules from a remote URL');
|
|
129
|
+
logger.info('');
|
|
130
|
+
logger.info('Example: agentinit rules add --template git,write_tests');
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const spinner = ora('Processing rules...').start();
|
|
134
|
+
try {
|
|
135
|
+
// 2. Process rules
|
|
136
|
+
const rulesParser = new RulesParser();
|
|
137
|
+
// Validate template IDs
|
|
138
|
+
if (templates.length > 0) {
|
|
139
|
+
const invalid = rulesParser.validateTemplateIds(templates);
|
|
140
|
+
if (invalid.length > 0) {
|
|
141
|
+
spinner.fail(`Unknown rule templates: ${invalid.join(', ')}`);
|
|
142
|
+
logger.info('Available templates: git, write_docs, use_git_worktrees, use_subagents, use_linter, write_tests');
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
const appliedRules = await rulesParser.processRules(rulesConfig);
|
|
147
|
+
if (appliedRules.merged.length === 0) {
|
|
148
|
+
spinner.warn('No rules to apply');
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
// 3. Resolve target agents
|
|
152
|
+
spinner.text = 'Resolving agents...';
|
|
153
|
+
const agentManager = new AgentManager();
|
|
154
|
+
const agents = await resolveTargetAgents(agentManager, options, cwd);
|
|
155
|
+
// 4. Apply rules to each agent
|
|
156
|
+
const results = [];
|
|
157
|
+
for (const agent of agents) {
|
|
158
|
+
if (!agent.capabilities.rules) {
|
|
159
|
+
logger.warning(`${agent.name}: Rules not supported, skipping`);
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
spinner.text = `Applying rules to ${agent.name}...`;
|
|
163
|
+
let result;
|
|
164
|
+
if (isGlobal) {
|
|
165
|
+
result = await agent.applyGlobalRules(appliedRules);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
result = await agent.applyRules(cwd, appliedRules);
|
|
169
|
+
}
|
|
170
|
+
results.push({ agent, result });
|
|
171
|
+
}
|
|
172
|
+
if (results.length === 0) {
|
|
173
|
+
spinner.warn('No agents with rules support found');
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
spinner.succeed('Rules applied successfully!');
|
|
177
|
+
// 5. Report results
|
|
178
|
+
logger.info('');
|
|
179
|
+
// Summarise sections
|
|
180
|
+
const allSections = results.flatMap(r => r.result.mergedSections || []);
|
|
181
|
+
const uniqueSections = Array.from(new Map(allSections.map(s => [s.templateId, s])).values());
|
|
182
|
+
const totalExisting = results.reduce((s, r) => s + (r.result.existingCount || 0), 0);
|
|
183
|
+
const totalNew = results.reduce((s, r) => s + (r.result.newlyAppliedCount || 0), 0);
|
|
184
|
+
if (totalExisting > 0) {
|
|
185
|
+
const existingSectionCount = uniqueSections.filter(section => section.rules.some(rule => results.some(r => r.result.existingRules?.includes(rule)))).length;
|
|
186
|
+
logger.info(`Already exists (${existingSectionCount} section${existingSectionCount !== 1 ? 's' : ''}):`);
|
|
187
|
+
uniqueSections.forEach(section => {
|
|
188
|
+
const existingRulesInSection = section.rules.filter(rule => results.some(r => r.result.existingRules?.includes(rule)));
|
|
189
|
+
if (existingRulesInSection.length > 0) {
|
|
190
|
+
logger.info(` - ${section.templateName} (${existingRulesInSection.length} rules)`);
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
if (totalNew > 0) {
|
|
195
|
+
if (totalExisting > 0)
|
|
196
|
+
logger.info('');
|
|
197
|
+
const newSectionCount = uniqueSections.filter(section => section.rules.some(rule => results.some(r => r.result.newlyApplied?.includes(rule)))).length;
|
|
198
|
+
logger.info(`Applied (${newSectionCount} section${newSectionCount !== 1 ? 's' : ''}):`);
|
|
199
|
+
uniqueSections.forEach(section => {
|
|
200
|
+
const newRulesInSection = section.rules.filter(rule => results.some(r => r.result.newlyApplied?.includes(rule)));
|
|
201
|
+
if (newRulesInSection.length > 0) {
|
|
202
|
+
logger.info(` - ${section.templateName} (${newRulesInSection.length} rules)`);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
// Per-agent breakdown
|
|
207
|
+
logger.info('');
|
|
208
|
+
logger.info(isGlobal ? 'Agents (global):' : 'Agents:');
|
|
209
|
+
for (const { agent, result } of results) {
|
|
210
|
+
logger.info(` - ${agent.name}`);
|
|
211
|
+
if (result.rulesApplied > 0) {
|
|
212
|
+
if (result.totalFileTokens && result.totalFileTokens > 0) {
|
|
213
|
+
const totalColored = colorizeTokenCount(result.totalFileTokens);
|
|
214
|
+
const diffColored = colorizeTokenDiff(result.tokenDiff || 0);
|
|
215
|
+
logger.info(` Total File: ${totalColored} tokens (${diffColored})`);
|
|
216
|
+
}
|
|
217
|
+
if (result.configPath) {
|
|
218
|
+
logger.info(` Config: ${result.configPath}`);
|
|
219
|
+
}
|
|
220
|
+
if (result.totalFileTokens && result.totalFileTokens > 30000) {
|
|
221
|
+
logger.warning(` Config file is overweight (>30k tokens). Consider reducing rules.`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (!result.success && result.errors?.length) {
|
|
225
|
+
for (const err of result.errors) {
|
|
226
|
+
logger.error(` ${err}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
spinner.fail('Failed to apply rules');
|
|
233
|
+
logger.error(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
234
|
+
process.exit(1);
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
// ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
|
|
238
|
+
// rules list (alias: ls)
|
|
239
|
+
// ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
|
|
240
|
+
rules
|
|
241
|
+
.command('list')
|
|
242
|
+
.alias('ls')
|
|
243
|
+
.description('List rules configured for each agent')
|
|
244
|
+
.option('-a, --agent <agents...>', 'Filter by specific agent(s)')
|
|
245
|
+
.option('-g, --global', 'List global rules')
|
|
246
|
+
.action(async (options) => {
|
|
247
|
+
logger.title('📏 AgentInit - Rules');
|
|
248
|
+
const cwd = process.cwd();
|
|
249
|
+
const isGlobal = !!options.global;
|
|
250
|
+
const agentManager = new AgentManager();
|
|
251
|
+
const agents = await resolveTargetAgents(agentManager, options, cwd);
|
|
252
|
+
let foundAny = false;
|
|
253
|
+
for (const agent of agents) {
|
|
254
|
+
if (!agent.capabilities.rules) {
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
const configPath = getRulesConfigPath(agent, cwd, isGlobal);
|
|
258
|
+
if (!configPath)
|
|
259
|
+
continue;
|
|
260
|
+
const content = await readFileIfExists(configPath);
|
|
261
|
+
if (!content) {
|
|
262
|
+
logger.info(`\n ${cyan(agent.name)} ${dim('(no rules config found)')}`);
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
const sections = agent.extractExistingSections(content);
|
|
266
|
+
if (sections.length === 0) {
|
|
267
|
+
logger.info(`\n ${cyan(agent.name)} ${dim('(no rules sections found)')}`);
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
foundAny = true;
|
|
271
|
+
logger.info(`\n ${cyan(agent.name)}`);
|
|
272
|
+
logger.info(` Config: ${configPath}`);
|
|
273
|
+
for (const section of sections) {
|
|
274
|
+
logger.info(`\n ${green(section.templateName)} ${dim(`(${section.rules.length} rules)`)}`);
|
|
275
|
+
for (const rule of section.rules) {
|
|
276
|
+
logger.info(` - ${rule}`);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
if (!foundAny) {
|
|
281
|
+
logger.info('');
|
|
282
|
+
logger.info('No rules found. Add rules with:');
|
|
283
|
+
logger.info(' agentinit rules add --template git,write_tests');
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
// ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
|
|
287
|
+
// rules remove [names...] (alias: rm)
|
|
288
|
+
// ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
|
|
289
|
+
rules
|
|
290
|
+
.command('remove [names...]')
|
|
291
|
+
.alias('rm')
|
|
292
|
+
.description('Remove rule sections by template ID (e.g. git, write_docs)')
|
|
293
|
+
.option('-a, --agent <agents...>', 'Target specific agent(s)')
|
|
294
|
+
.option('-g, --global', 'Remove from global rules')
|
|
295
|
+
.action(async (names, options) => {
|
|
296
|
+
logger.title('📏 AgentInit - Rules');
|
|
297
|
+
if (!names || names.length === 0) {
|
|
298
|
+
logger.error('Please specify rule section name(s) to remove.');
|
|
299
|
+
logger.info('Usage: agentinit rules remove <name...>');
|
|
300
|
+
logger.info('');
|
|
301
|
+
logger.info('Section names correspond to template IDs (e.g. git, write_docs, use_linter)');
|
|
302
|
+
logger.info('Run "agentinit rules list" to see current sections.');
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
const cwd = process.cwd();
|
|
306
|
+
const isGlobal = !!options.global;
|
|
307
|
+
const agentManager = new AgentManager();
|
|
308
|
+
const agents = await resolveTargetAgents(agentManager, options, cwd);
|
|
309
|
+
const spinner = ora('Removing rules...').start();
|
|
310
|
+
let totalRemoved = 0;
|
|
311
|
+
try {
|
|
312
|
+
for (const agent of agents) {
|
|
313
|
+
if (!agent.capabilities.rules) {
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
const configPath = getRulesConfigPath(agent, cwd, isGlobal);
|
|
317
|
+
if (!configPath)
|
|
318
|
+
continue;
|
|
319
|
+
const content = await readFileIfExists(configPath);
|
|
320
|
+
if (!content)
|
|
321
|
+
continue;
|
|
322
|
+
const sections = agent.extractExistingSections(content);
|
|
323
|
+
if (sections.length === 0)
|
|
324
|
+
continue;
|
|
325
|
+
// Normalise lookup: names are matched against templateId
|
|
326
|
+
const namesToRemove = new Set(names.map(n => n.toLowerCase().replace(/\s+/g, '_')));
|
|
327
|
+
const remaining = sections.filter(s => !namesToRemove.has(s.templateId));
|
|
328
|
+
const removed = sections.filter(s => namesToRemove.has(s.templateId));
|
|
329
|
+
if (removed.length === 0) {
|
|
330
|
+
continue;
|
|
331
|
+
}
|
|
332
|
+
const updatedContent = await agent.applyRulesConfig(configPath, buildAppliedRules(remaining), content);
|
|
333
|
+
await writeFile(configPath, updatedContent);
|
|
334
|
+
totalRemoved += removed.length;
|
|
335
|
+
for (const s of removed) {
|
|
336
|
+
logger.info(` ${agent.name}: removed ${green(s.templateName)} (${s.rules.length} rules)`);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
if (totalRemoved === 0) {
|
|
340
|
+
spinner.warn('No matching rule sections found to remove');
|
|
341
|
+
logger.info('Run "agentinit rules list" to see current sections.');
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
spinner.succeed(`Removed ${totalRemoved} rule section${totalRemoved !== 1 ? 's' : ''}`);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
catch (error) {
|
|
348
|
+
spinner.fail('Failed to remove rules');
|
|
349
|
+
logger.error(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
350
|
+
process.exit(1);
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
//# sourceMappingURL=rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/commands/rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoM5D"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import ora from 'ora';
|
|
2
|
+
import { green } from 'kleur/colors';
|
|
3
|
+
import { logger } from '../utils/logger.js';
|
|
4
|
+
import { SkillsManager } from '../core/skillsManager.js';
|
|
5
|
+
import { AgentManager } from '../core/agentManager.js';
|
|
6
|
+
export function registerSkillsCommand(program) {
|
|
7
|
+
const skills = program
|
|
8
|
+
.command('skills')
|
|
9
|
+
.description('Manage agent skills');
|
|
10
|
+
// --- skills add <source> ---
|
|
11
|
+
skills
|
|
12
|
+
.command('add <source>')
|
|
13
|
+
.description('Add skills from a GitHub repo or local path')
|
|
14
|
+
.option('-g, --global', 'Install skills globally')
|
|
15
|
+
.option('-a, --agent <agents...>', 'Target specific agent(s)')
|
|
16
|
+
.option('-s, --skill <names...>', 'Install only specific skills by name')
|
|
17
|
+
.option('-l, --list', 'List available skills from the source without installing')
|
|
18
|
+
.option('--copy', 'Copy skill files instead of symlinking')
|
|
19
|
+
.option('-y, --yes', 'Skip confirmation prompts')
|
|
20
|
+
.action(async (source, options) => {
|
|
21
|
+
logger.title('📦 AgentInit - Skills');
|
|
22
|
+
const agentManager = new AgentManager();
|
|
23
|
+
const skillsManager = new SkillsManager(agentManager);
|
|
24
|
+
// If --list, discover and display skills from source, then return
|
|
25
|
+
if (options.list) {
|
|
26
|
+
const spinner = ora('Discovering skills...').start();
|
|
27
|
+
try {
|
|
28
|
+
const resolved = skillsManager.resolveSource(source);
|
|
29
|
+
let repoPath;
|
|
30
|
+
let tempDir = null;
|
|
31
|
+
if (resolved.type === 'github') {
|
|
32
|
+
if (!resolved.url) {
|
|
33
|
+
spinner.fail(`Invalid source: ${source}`);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
tempDir = await skillsManager.cloneRepo(resolved.url);
|
|
37
|
+
repoPath = tempDir;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
const { resolve: resolvePath } = await import('path');
|
|
41
|
+
repoPath = resolvePath(resolved.path || source);
|
|
42
|
+
}
|
|
43
|
+
const skills = await skillsManager.discoverSkills(repoPath);
|
|
44
|
+
spinner.stop();
|
|
45
|
+
if (skills.length === 0) {
|
|
46
|
+
logger.info('No skills found in the source.');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
logger.info(`Found ${green(String(skills.length))} skill(s):\n`);
|
|
50
|
+
logger.info(' Name Description');
|
|
51
|
+
logger.info(' ────────────────── ──────────────────────────────────');
|
|
52
|
+
for (const skill of skills) {
|
|
53
|
+
const name = skill.name.padEnd(18);
|
|
54
|
+
logger.info(` ${green(name)} ${skill.description}`);
|
|
55
|
+
}
|
|
56
|
+
// Clean up temp dir if cloned
|
|
57
|
+
if (tempDir) {
|
|
58
|
+
const { promises: fs } = await import('fs');
|
|
59
|
+
await fs.rm(tempDir, { recursive: true, force: true }).catch(() => { });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
spinner.fail('Failed to discover skills');
|
|
64
|
+
logger.error(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
65
|
+
}
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// Install skills
|
|
69
|
+
const spinner = ora('Installing skills...').start();
|
|
70
|
+
try {
|
|
71
|
+
const result = await skillsManager.addFromSource(source, process.cwd(), {
|
|
72
|
+
global: options.global,
|
|
73
|
+
agents: options.agent,
|
|
74
|
+
skills: options.skill,
|
|
75
|
+
copy: options.copy,
|
|
76
|
+
yes: options.yes,
|
|
77
|
+
});
|
|
78
|
+
if (result.installed.length === 0 && result.skipped.length === 0) {
|
|
79
|
+
spinner.warn('No skills found in the source.');
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
spinner.succeed(`Installed ${green(String(result.installed.length))} skill(s)`);
|
|
83
|
+
// Show per-agent breakdown
|
|
84
|
+
const byAgent = new Map();
|
|
85
|
+
for (const item of result.installed) {
|
|
86
|
+
byAgent.set(item.agent, (byAgent.get(item.agent) || 0) + 1);
|
|
87
|
+
}
|
|
88
|
+
for (const [agent, count] of byAgent) {
|
|
89
|
+
logger.info(` ${agent}: ${green(String(count))} skill(s) installed`);
|
|
90
|
+
}
|
|
91
|
+
// Show skipped skills
|
|
92
|
+
if (result.skipped.length > 0) {
|
|
93
|
+
logger.info('');
|
|
94
|
+
logger.warn(`Skipped ${result.skipped.length} skill(s):`);
|
|
95
|
+
for (const skip of result.skipped) {
|
|
96
|
+
logger.info(` ${skip.skill.name}: ${skip.reason}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
logger.success('Skills installation complete.');
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
spinner.fail('Failed to install skills');
|
|
103
|
+
logger.error(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
// --- skills list (alias: ls) ---
|
|
107
|
+
skills
|
|
108
|
+
.command('list')
|
|
109
|
+
.alias('ls')
|
|
110
|
+
.description('List installed skills')
|
|
111
|
+
.option('-g, --global', 'List only global skills')
|
|
112
|
+
.option('-a, --agent <agents...>', 'Filter by specific agent(s)')
|
|
113
|
+
.action(async (options) => {
|
|
114
|
+
logger.title('📦 AgentInit - Skills');
|
|
115
|
+
const agentManager = new AgentManager();
|
|
116
|
+
const skillsManager = new SkillsManager(agentManager);
|
|
117
|
+
const installed = await skillsManager.listInstalled(process.cwd(), {
|
|
118
|
+
global: options.global,
|
|
119
|
+
agents: options.agent,
|
|
120
|
+
});
|
|
121
|
+
if (installed.length === 0) {
|
|
122
|
+
logger.info('No skills installed.');
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
// Group by agent
|
|
126
|
+
const byAgent = new Map();
|
|
127
|
+
for (const skill of installed) {
|
|
128
|
+
const list = byAgent.get(skill.agent) || [];
|
|
129
|
+
list.push(skill);
|
|
130
|
+
byAgent.set(skill.agent, list);
|
|
131
|
+
}
|
|
132
|
+
for (const [agent, agentSkills] of byAgent) {
|
|
133
|
+
logger.info(`\n ${green(agent)}`);
|
|
134
|
+
for (const skill of agentSkills) {
|
|
135
|
+
const symlink = skill.isSymlink ? ' (symlink)' : '';
|
|
136
|
+
const scope = skill.scope === 'global' ? ' [global]' : '';
|
|
137
|
+
logger.info(` ${green(skill.name)} - ${skill.description}${scope}${symlink}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
// --- skills remove [names...] (alias: rm) ---
|
|
142
|
+
skills
|
|
143
|
+
.command('remove [names...]')
|
|
144
|
+
.alias('rm')
|
|
145
|
+
.description('Remove installed skills by name')
|
|
146
|
+
.option('-g, --global', 'Remove from global scope')
|
|
147
|
+
.option('-a, --agent <agents...>', 'Target specific agent(s)')
|
|
148
|
+
.option('-y, --yes', 'Skip confirmation prompts')
|
|
149
|
+
.action(async (names, options) => {
|
|
150
|
+
logger.title('📦 AgentInit - Skills');
|
|
151
|
+
if (!names || names.length === 0) {
|
|
152
|
+
if (!options.yes) {
|
|
153
|
+
logger.error('Please specify skill name(s) to remove.');
|
|
154
|
+
logger.info('Usage: agentinit skills remove <name...>');
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
const agentManager = new AgentManager();
|
|
159
|
+
const skillsManager = new SkillsManager(agentManager);
|
|
160
|
+
const result = await skillsManager.remove(names, process.cwd(), {
|
|
161
|
+
global: options.global,
|
|
162
|
+
agents: options.agent,
|
|
163
|
+
yes: options.yes,
|
|
164
|
+
});
|
|
165
|
+
if (result.removed.length > 0) {
|
|
166
|
+
logger.success(`Removed ${green(String(result.removed.length))} skill(s).`);
|
|
167
|
+
for (const entry of result.removed) {
|
|
168
|
+
logger.info(` ${entry}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (result.notFound.length > 0) {
|
|
172
|
+
logger.warn(`Not found: ${result.notFound.join(', ')}`);
|
|
173
|
+
}
|
|
174
|
+
if (result.removed.length === 0 && result.notFound.length === 0) {
|
|
175
|
+
logger.info('Nothing to remove.');
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/sync.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAKA,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqErE"}
|
package/dist/commands/sync.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import ora from 'ora';
|
|
2
2
|
import { logger } from '../utils/logger.js';
|
|
3
3
|
import { Propagator } from '../core/propagator.js';
|
|
4
|
+
import { ManagedStateStore } from '../core/managedState.js';
|
|
4
5
|
export async function syncCommand(options) {
|
|
5
6
|
const cwd = process.cwd();
|
|
6
7
|
logger.title('🔄 AgentInit - Sync Configuration');
|
|
@@ -9,8 +10,24 @@ export async function syncCommand(options) {
|
|
|
9
10
|
}
|
|
10
11
|
const spinner = ora('Syncing agents.md with agent configurations...').start();
|
|
11
12
|
try {
|
|
13
|
+
const managedState = await ManagedStateStore.open(cwd);
|
|
12
14
|
const propagator = new Propagator();
|
|
13
|
-
const
|
|
15
|
+
const syncOptions = {
|
|
16
|
+
managedState,
|
|
17
|
+
};
|
|
18
|
+
if (options.dryRun !== undefined) {
|
|
19
|
+
syncOptions.dryRun = options.dryRun;
|
|
20
|
+
}
|
|
21
|
+
if (options.backup !== undefined) {
|
|
22
|
+
syncOptions.backup = options.backup;
|
|
23
|
+
}
|
|
24
|
+
if (options.agent && options.agent.length > 0) {
|
|
25
|
+
syncOptions.targets = options.agent;
|
|
26
|
+
}
|
|
27
|
+
const result = await propagator.syncAgentsFile(cwd, syncOptions);
|
|
28
|
+
if (!options.dryRun) {
|
|
29
|
+
await managedState.save();
|
|
30
|
+
}
|
|
14
31
|
if (result.success) {
|
|
15
32
|
spinner.succeed('Synchronization complete');
|
|
16
33
|
if (result.changes.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
|