@swarmify/agents-cli 1.6.8 → 1.6.10
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/dist/commands/cron.d.ts.map +1 -1
- package/dist/commands/cron.js +1 -0
- package/dist/commands/cron.js.map +1 -1
- package/dist/commands/hooks.d.ts.map +1 -1
- package/dist/commands/hooks.js +24 -3
- package/dist/commands/hooks.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 +172 -0
- package/dist/commands/plugins.js.map +1 -0
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +24 -0
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/versions.d.ts.map +1 -1
- package/dist/commands/versions.js +8 -1
- package/dist/commands/versions.js.map +1 -1
- package/dist/commands/view.d.ts.map +1 -1
- package/dist/commands/view.js +2 -0
- package/dist/commands/view.js.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/__tests__/bugfixes.test.d.ts +2 -0
- package/dist/lib/__tests__/bugfixes.test.d.ts.map +1 -0
- package/dist/lib/__tests__/bugfixes.test.js +192 -0
- package/dist/lib/__tests__/bugfixes.test.js.map +1 -0
- package/dist/lib/__tests__/git-sync.test.js +1 -1
- package/dist/lib/__tests__/git-sync.test.js.map +1 -1
- package/dist/lib/__tests__/permissions.test.d.ts +2 -0
- package/dist/lib/__tests__/permissions.test.d.ts.map +1 -0
- package/dist/lib/__tests__/permissions.test.js +120 -0
- package/dist/lib/__tests__/permissions.test.js.map +1 -0
- package/dist/lib/agents.d.ts +1 -0
- package/dist/lib/agents.d.ts.map +1 -1
- package/dist/lib/agents.js +7 -6
- package/dist/lib/agents.js.map +1 -1
- package/dist/lib/cron.d.ts +2 -0
- package/dist/lib/cron.d.ts.map +1 -1
- package/dist/lib/cron.js +26 -7
- package/dist/lib/cron.js.map +1 -1
- package/dist/lib/hooks.d.ts +16 -1
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +116 -1
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/permissions.d.ts +6 -0
- package/dist/lib/permissions.d.ts.map +1 -1
- package/dist/lib/permissions.js +42 -0
- package/dist/lib/permissions.js.map +1 -1
- package/dist/lib/plugins.d.ts +58 -0
- package/dist/lib/plugins.d.ts.map +1 -0
- package/dist/lib/plugins.js +442 -0
- package/dist/lib/plugins.js.map +1 -0
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/lib/runner.js +12 -4
- package/dist/lib/runner.js.map +1 -1
- package/dist/lib/sandbox.d.ts.map +1 -1
- package/dist/lib/sandbox.js +47 -12
- package/dist/lib/sandbox.js.map +1 -1
- package/dist/lib/scheduler.d.ts.map +1 -1
- package/dist/lib/scheduler.js +6 -1
- package/dist/lib/scheduler.js.map +1 -1
- package/dist/lib/state.d.ts +1 -0
- package/dist/lib/state.d.ts.map +1 -1
- package/dist/lib/state.js +4 -0
- package/dist/lib/state.js.map +1 -1
- package/dist/lib/types.d.ts +30 -1
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/versions.d.ts +3 -0
- package/dist/lib/versions.d.ts.map +1 -1
- package/dist/lib/versions.js +171 -55
- package/dist/lib/versions.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { getPluginsDir } from './state.js';
|
|
4
|
+
import { AGENTS, PLUGINS_CAPABLE_AGENTS } from './agents.js';
|
|
5
|
+
const PLUGIN_MANIFEST_DIR = '.claude-plugin';
|
|
6
|
+
const PLUGIN_MANIFEST_FILE = 'plugin.json';
|
|
7
|
+
/**
|
|
8
|
+
* Discover all plugins in ~/.agents/plugins/.
|
|
9
|
+
* A valid plugin has a .claude-plugin/plugin.json manifest.
|
|
10
|
+
*/
|
|
11
|
+
export function discoverPlugins() {
|
|
12
|
+
const pluginsDir = getPluginsDir();
|
|
13
|
+
if (!fs.existsSync(pluginsDir)) {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
const plugins = [];
|
|
17
|
+
const entries = fs.readdirSync(pluginsDir, { withFileTypes: true });
|
|
18
|
+
for (const entry of entries) {
|
|
19
|
+
if (!entry.isDirectory() || entry.name.startsWith('.'))
|
|
20
|
+
continue;
|
|
21
|
+
const pluginRoot = path.join(pluginsDir, entry.name);
|
|
22
|
+
const manifest = loadPluginManifest(pluginRoot);
|
|
23
|
+
if (!manifest)
|
|
24
|
+
continue;
|
|
25
|
+
plugins.push({
|
|
26
|
+
name: manifest.name,
|
|
27
|
+
root: pluginRoot,
|
|
28
|
+
manifest,
|
|
29
|
+
skills: discoverPluginSkills(pluginRoot),
|
|
30
|
+
hooks: discoverPluginHooks(pluginRoot),
|
|
31
|
+
scripts: discoverPluginScripts(pluginRoot),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return plugins;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Load a plugin manifest from a plugin directory.
|
|
38
|
+
*/
|
|
39
|
+
export function loadPluginManifest(pluginRoot) {
|
|
40
|
+
const manifestPath = path.join(pluginRoot, PLUGIN_MANIFEST_DIR, PLUGIN_MANIFEST_FILE);
|
|
41
|
+
if (!fs.existsSync(manifestPath)) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const content = fs.readFileSync(manifestPath, 'utf-8');
|
|
46
|
+
const parsed = JSON.parse(content);
|
|
47
|
+
if (!parsed.name || !parsed.version)
|
|
48
|
+
return null;
|
|
49
|
+
return parsed;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get a specific plugin by name.
|
|
57
|
+
*/
|
|
58
|
+
export function getPlugin(name) {
|
|
59
|
+
const plugins = discoverPlugins();
|
|
60
|
+
return plugins.find(p => p.name === name) || null;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Check if an agent supports a specific plugin.
|
|
64
|
+
* If the plugin specifies agents, only those are supported.
|
|
65
|
+
* Otherwise defaults to all plugin-capable agents.
|
|
66
|
+
*/
|
|
67
|
+
export function pluginSupportsAgent(plugin, agent) {
|
|
68
|
+
if (!PLUGINS_CAPABLE_AGENTS.includes(agent))
|
|
69
|
+
return false;
|
|
70
|
+
if (plugin.manifest.agents && plugin.manifest.agents.length > 0) {
|
|
71
|
+
return plugin.manifest.agents.includes(agent);
|
|
72
|
+
}
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Discover skill directories inside a plugin.
|
|
77
|
+
*/
|
|
78
|
+
function discoverPluginSkills(pluginRoot) {
|
|
79
|
+
const skillsDir = path.join(pluginRoot, 'skills');
|
|
80
|
+
if (!fs.existsSync(skillsDir))
|
|
81
|
+
return [];
|
|
82
|
+
return fs.readdirSync(skillsDir, { withFileTypes: true })
|
|
83
|
+
.filter(d => d.isDirectory() && !d.name.startsWith('.'))
|
|
84
|
+
.map(d => d.name);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Discover hook definitions inside a plugin.
|
|
88
|
+
*/
|
|
89
|
+
function discoverPluginHooks(pluginRoot) {
|
|
90
|
+
const hooksFile = path.join(pluginRoot, 'hooks', 'hooks.json');
|
|
91
|
+
if (!fs.existsSync(hooksFile))
|
|
92
|
+
return [];
|
|
93
|
+
try {
|
|
94
|
+
const content = JSON.parse(fs.readFileSync(hooksFile, 'utf-8'));
|
|
95
|
+
return Object.keys(content);
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Discover scripts inside a plugin.
|
|
103
|
+
*/
|
|
104
|
+
function discoverPluginScripts(pluginRoot) {
|
|
105
|
+
const scriptsDir = path.join(pluginRoot, 'scripts');
|
|
106
|
+
if (!fs.existsSync(scriptsDir))
|
|
107
|
+
return [];
|
|
108
|
+
return fs.readdirSync(scriptsDir).filter(f => !f.startsWith('.'));
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Expand plugin variables in a string.
|
|
112
|
+
*
|
|
113
|
+
* Variables:
|
|
114
|
+
* ${CLAUDE_PLUGIN_ROOT} -> absolute path to plugin directory
|
|
115
|
+
* ${CLAUDE_PLUGIN_DATA} -> per-version data directory for this plugin
|
|
116
|
+
*/
|
|
117
|
+
export function expandPluginVars(str, pluginRoot, pluginName, agentId, versionHome) {
|
|
118
|
+
const dataDir = path.join(versionHome, `.${agentId}`, 'plugin-data', pluginName);
|
|
119
|
+
return str
|
|
120
|
+
.replace(/\$\{CLAUDE_PLUGIN_ROOT\}/g, pluginRoot)
|
|
121
|
+
.replace(/\$\{CLAUDE_PLUGIN_DATA\}/g, dataDir);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Sync a plugin to a specific agent version's home directory.
|
|
125
|
+
*
|
|
126
|
+
* For Claude:
|
|
127
|
+
* 1. Copy plugin skills into version's skills dir (prefixed: pluginName:skillName)
|
|
128
|
+
* 2. Read hooks/hooks.json, expand vars, merge into settings.json hooks
|
|
129
|
+
* 3. Read settings.json, expand vars, merge permissions into settings.json
|
|
130
|
+
*
|
|
131
|
+
* For OpenClaw:
|
|
132
|
+
* 1. Copy plugin skills into version's skills dir
|
|
133
|
+
*/
|
|
134
|
+
export function syncPluginToVersion(plugin, agent, versionHome) {
|
|
135
|
+
const result = { success: false, skills: [], hooks: [], permissions: false };
|
|
136
|
+
if (!pluginSupportsAgent(plugin, agent)) {
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
// 1. Sync skills
|
|
140
|
+
const skillsResult = syncPluginSkills(plugin, agent, versionHome);
|
|
141
|
+
result.skills = skillsResult;
|
|
142
|
+
// 2. Sync hooks (Claude only - uses settings.json hook registration)
|
|
143
|
+
if (agent === 'claude') {
|
|
144
|
+
const hooksResult = syncPluginHooks(plugin, agent, versionHome);
|
|
145
|
+
result.hooks = hooksResult;
|
|
146
|
+
}
|
|
147
|
+
// 3. Sync permissions (Claude only - uses settings.json permissions)
|
|
148
|
+
if (agent === 'claude') {
|
|
149
|
+
result.permissions = syncPluginPermissions(plugin, agent, versionHome);
|
|
150
|
+
}
|
|
151
|
+
result.success = result.skills.length > 0 || result.hooks.length > 0 || result.permissions;
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Copy plugin skills into the version's skills directory.
|
|
156
|
+
* Skills are prefixed with the plugin name: pluginName:skillName
|
|
157
|
+
*/
|
|
158
|
+
function syncPluginSkills(plugin, agent, versionHome) {
|
|
159
|
+
const synced = [];
|
|
160
|
+
const pluginSkillsDir = path.join(plugin.root, 'skills');
|
|
161
|
+
if (!fs.existsSync(pluginSkillsDir))
|
|
162
|
+
return synced;
|
|
163
|
+
const agentConfig = AGENTS[agent];
|
|
164
|
+
const targetSkillsDir = path.join(versionHome, `.${agent}`, 'skills');
|
|
165
|
+
fs.mkdirSync(targetSkillsDir, { recursive: true });
|
|
166
|
+
for (const skillName of plugin.skills) {
|
|
167
|
+
const srcDir = path.join(pluginSkillsDir, skillName);
|
|
168
|
+
// Prefix with plugin name for namespacing
|
|
169
|
+
const prefixedName = `${plugin.name}:${skillName}`;
|
|
170
|
+
// Use colon-to-dash for filesystem (colons not allowed on some systems)
|
|
171
|
+
const fsSafeName = prefixedName.replace(/:/g, '--');
|
|
172
|
+
const destDir = path.join(targetSkillsDir, fsSafeName);
|
|
173
|
+
try {
|
|
174
|
+
// Remove existing and copy fresh
|
|
175
|
+
if (fs.existsSync(destDir)) {
|
|
176
|
+
fs.rmSync(destDir, { recursive: true, force: true });
|
|
177
|
+
}
|
|
178
|
+
copyDirWithVarExpansion(srcDir, destDir, plugin.root, plugin.name, agent, versionHome);
|
|
179
|
+
synced.push(prefixedName);
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
// Skip on error
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return synced;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Merge plugin hooks into Claude's settings.json.
|
|
189
|
+
* Reads the plugin's hooks/hooks.json and merges each event's hooks
|
|
190
|
+
* into the version's settings.json, expanding variables.
|
|
191
|
+
*/
|
|
192
|
+
function syncPluginHooks(plugin, agent, versionHome) {
|
|
193
|
+
const synced = [];
|
|
194
|
+
const hooksFile = path.join(plugin.root, 'hooks', 'hooks.json');
|
|
195
|
+
if (!fs.existsSync(hooksFile))
|
|
196
|
+
return synced;
|
|
197
|
+
let pluginHooks;
|
|
198
|
+
try {
|
|
199
|
+
pluginHooks = JSON.parse(fs.readFileSync(hooksFile, 'utf-8'));
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return synced;
|
|
203
|
+
}
|
|
204
|
+
// Read existing settings.json
|
|
205
|
+
const configDir = path.join(versionHome, `.${agent}`);
|
|
206
|
+
const settingsPath = path.join(configDir, 'settings.json');
|
|
207
|
+
let settings = {};
|
|
208
|
+
if (fs.existsSync(settingsPath)) {
|
|
209
|
+
try {
|
|
210
|
+
settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
// Start fresh if parse fails
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
if (!settings.hooks || typeof settings.hooks !== 'object') {
|
|
217
|
+
settings.hooks = {};
|
|
218
|
+
}
|
|
219
|
+
const hooksConfig = settings.hooks;
|
|
220
|
+
// Merge each event from the plugin
|
|
221
|
+
for (const [event, matcherGroups] of Object.entries(pluginHooks)) {
|
|
222
|
+
if (!hooksConfig[event]) {
|
|
223
|
+
hooksConfig[event] = [];
|
|
224
|
+
}
|
|
225
|
+
const eventEntries = hooksConfig[event];
|
|
226
|
+
for (const group of matcherGroups) {
|
|
227
|
+
const matcher = group.matcher || '';
|
|
228
|
+
const expandedHooks = (group.hooks || []).map(h => ({
|
|
229
|
+
...h,
|
|
230
|
+
command: expandPluginVars(h.command, plugin.root, plugin.name, agent, versionHome),
|
|
231
|
+
}));
|
|
232
|
+
// Find or create matcher group
|
|
233
|
+
let matcherGroup = eventEntries.find(e => (e.matcher || '') === matcher);
|
|
234
|
+
if (!matcherGroup) {
|
|
235
|
+
matcherGroup = { matcher, hooks: [] };
|
|
236
|
+
eventEntries.push(matcherGroup);
|
|
237
|
+
}
|
|
238
|
+
if (!matcherGroup.hooks) {
|
|
239
|
+
matcherGroup.hooks = [];
|
|
240
|
+
}
|
|
241
|
+
// Add hooks that aren't already registered (by command path)
|
|
242
|
+
for (const hook of expandedHooks) {
|
|
243
|
+
const exists = matcherGroup.hooks.some(h => h.command === hook.command);
|
|
244
|
+
if (!exists) {
|
|
245
|
+
matcherGroup.hooks.push(hook);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
synced.push(event);
|
|
250
|
+
}
|
|
251
|
+
// Write back
|
|
252
|
+
try {
|
|
253
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
254
|
+
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2), 'utf-8');
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
// Ignore write errors
|
|
258
|
+
}
|
|
259
|
+
return synced;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Merge plugin permissions into Claude's settings.json.
|
|
263
|
+
* Reads the plugin's settings.json and merges permissions.allow entries.
|
|
264
|
+
*/
|
|
265
|
+
function syncPluginPermissions(plugin, agent, versionHome) {
|
|
266
|
+
const pluginSettingsPath = path.join(plugin.root, 'settings.json');
|
|
267
|
+
if (!fs.existsSync(pluginSettingsPath))
|
|
268
|
+
return false;
|
|
269
|
+
let pluginSettings;
|
|
270
|
+
try {
|
|
271
|
+
pluginSettings = JSON.parse(fs.readFileSync(pluginSettingsPath, 'utf-8'));
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
return false;
|
|
275
|
+
}
|
|
276
|
+
const pluginAllow = pluginSettings.permissions?.allow || [];
|
|
277
|
+
const pluginDeny = pluginSettings.permissions?.deny || [];
|
|
278
|
+
if (pluginAllow.length === 0 && pluginDeny.length === 0)
|
|
279
|
+
return false;
|
|
280
|
+
// Expand variables in permission rules
|
|
281
|
+
const expandedAllow = pluginAllow.map(rule => expandPluginVars(rule, plugin.root, plugin.name, agent, versionHome));
|
|
282
|
+
const expandedDeny = pluginDeny.map(rule => expandPluginVars(rule, plugin.root, plugin.name, agent, versionHome));
|
|
283
|
+
// Read existing settings.json
|
|
284
|
+
const configDir = path.join(versionHome, `.${agent}`);
|
|
285
|
+
const settingsPath = path.join(configDir, 'settings.json');
|
|
286
|
+
let settings = {};
|
|
287
|
+
if (fs.existsSync(settingsPath)) {
|
|
288
|
+
try {
|
|
289
|
+
settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
// Start fresh
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
if (!settings.permissions || typeof settings.permissions !== 'object') {
|
|
296
|
+
settings.permissions = { allow: [], deny: [] };
|
|
297
|
+
}
|
|
298
|
+
const perms = settings.permissions;
|
|
299
|
+
if (!perms.allow)
|
|
300
|
+
perms.allow = [];
|
|
301
|
+
if (!perms.deny)
|
|
302
|
+
perms.deny = [];
|
|
303
|
+
// Merge allow rules (deduplicate)
|
|
304
|
+
for (const rule of expandedAllow) {
|
|
305
|
+
if (!perms.allow.includes(rule)) {
|
|
306
|
+
perms.allow.push(rule);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
// Merge deny rules (deduplicate)
|
|
310
|
+
for (const rule of expandedDeny) {
|
|
311
|
+
if (!perms.deny.includes(rule)) {
|
|
312
|
+
perms.deny.push(rule);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
// Write back
|
|
316
|
+
try {
|
|
317
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
318
|
+
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2), 'utf-8');
|
|
319
|
+
return true;
|
|
320
|
+
}
|
|
321
|
+
catch {
|
|
322
|
+
return false;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Copy a directory recursively, expanding plugin variables in file contents.
|
|
327
|
+
* Only expands variables in text files (.md, .json, .sh, .py, .js, .ts, .yaml, .yml, .toml).
|
|
328
|
+
*/
|
|
329
|
+
function copyDirWithVarExpansion(src, dest, pluginRoot, pluginName, agent, versionHome) {
|
|
330
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
331
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
332
|
+
const textExtensions = new Set(['.md', '.json', '.sh', '.py', '.js', '.ts', '.yaml', '.yml', '.toml', '.txt']);
|
|
333
|
+
for (const entry of entries) {
|
|
334
|
+
const srcPath = path.join(src, entry.name);
|
|
335
|
+
const destPath = path.join(dest, entry.name);
|
|
336
|
+
if (entry.isDirectory()) {
|
|
337
|
+
copyDirWithVarExpansion(srcPath, destPath, pluginRoot, pluginName, agent, versionHome);
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
const ext = path.extname(entry.name).toLowerCase();
|
|
341
|
+
if (textExtensions.has(ext)) {
|
|
342
|
+
// Expand variables in text files
|
|
343
|
+
let content = fs.readFileSync(srcPath, 'utf-8');
|
|
344
|
+
content = expandPluginVars(content, pluginRoot, pluginName, agent, versionHome);
|
|
345
|
+
fs.writeFileSync(destPath, content, 'utf-8');
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
// Binary copy
|
|
349
|
+
fs.copyFileSync(srcPath, destPath);
|
|
350
|
+
}
|
|
351
|
+
// Preserve executable permission
|
|
352
|
+
const stat = fs.statSync(srcPath);
|
|
353
|
+
if (stat.mode & 0o111) {
|
|
354
|
+
fs.chmodSync(destPath, stat.mode);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Check if a plugin is synced to a version by inspecting the version home.
|
|
361
|
+
* Checks multiple signals: skills directories, hook commands in settings.json,
|
|
362
|
+
* and plugin permissions in settings.json.
|
|
363
|
+
*/
|
|
364
|
+
export function isPluginSynced(plugin, agent, versionHome) {
|
|
365
|
+
// Check 1: plugin skill directories exist
|
|
366
|
+
if (plugin.skills.length > 0) {
|
|
367
|
+
const skillsDir = path.join(versionHome, `.${agent}`, 'skills');
|
|
368
|
+
if (fs.existsSync(skillsDir)) {
|
|
369
|
+
for (const skillName of plugin.skills) {
|
|
370
|
+
const fsSafeName = `${plugin.name}--${skillName}`;
|
|
371
|
+
if (fs.existsSync(path.join(skillsDir, fsSafeName))) {
|
|
372
|
+
return true;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
// Check 2: plugin hooks registered in settings.json (commands referencing plugin root)
|
|
378
|
+
if (plugin.hooks.length > 0 && agent === 'claude') {
|
|
379
|
+
const settingsPath = path.join(versionHome, `.${agent}`, 'settings.json');
|
|
380
|
+
if (fs.existsSync(settingsPath)) {
|
|
381
|
+
try {
|
|
382
|
+
const content = fs.readFileSync(settingsPath, 'utf-8');
|
|
383
|
+
// Check if any hook command references this plugin's root path
|
|
384
|
+
if (content.includes(plugin.root)) {
|
|
385
|
+
return true;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
catch {
|
|
389
|
+
// Ignore read errors
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
// Check 3: plugin permissions in settings.json (rules referencing plugin root)
|
|
394
|
+
if (agent === 'claude') {
|
|
395
|
+
const settingsPath = path.join(versionHome, `.${agent}`, 'settings.json');
|
|
396
|
+
if (fs.existsSync(settingsPath)) {
|
|
397
|
+
try {
|
|
398
|
+
const settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
|
|
399
|
+
const allow = settings.permissions?.allow || [];
|
|
400
|
+
if (allow.some((rule) => rule.includes(plugin.root))) {
|
|
401
|
+
return true;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
catch {
|
|
405
|
+
// Ignore parse errors
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
return false;
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Remove orphaned plugin skill directories from a version home.
|
|
413
|
+
* An orphan is a skill dir with the plugin prefix pattern (name--skill)
|
|
414
|
+
* where the plugin no longer exists in ~/.agents/plugins/.
|
|
415
|
+
*/
|
|
416
|
+
export function cleanOrphanedPluginSkills(agent, versionHome, activePluginNames) {
|
|
417
|
+
const removed = [];
|
|
418
|
+
const skillsDir = path.join(versionHome, `.${agent}`, 'skills');
|
|
419
|
+
if (!fs.existsSync(skillsDir))
|
|
420
|
+
return removed;
|
|
421
|
+
const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
|
|
422
|
+
for (const entry of entries) {
|
|
423
|
+
if (!entry.isDirectory())
|
|
424
|
+
continue;
|
|
425
|
+
// Plugin skill dirs use the pattern: pluginName--skillName
|
|
426
|
+
const dashIdx = entry.name.indexOf('--');
|
|
427
|
+
if (dashIdx === -1)
|
|
428
|
+
continue;
|
|
429
|
+
const pluginName = entry.name.slice(0, dashIdx);
|
|
430
|
+
if (!activePluginNames.has(pluginName)) {
|
|
431
|
+
try {
|
|
432
|
+
fs.rmSync(path.join(skillsDir, entry.name), { recursive: true, force: true });
|
|
433
|
+
removed.push(entry.name);
|
|
434
|
+
}
|
|
435
|
+
catch {
|
|
436
|
+
// Skip on error
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
return removed;
|
|
441
|
+
}
|
|
442
|
+
//# sourceMappingURL=plugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/lib/plugins.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAQD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,CAkDnF;AAMD,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAQD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,CAkDnF;AAMD,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAkGtE;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CA2C5E;AAkBD,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CA2CnF;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAkCzC"}
|
package/dist/lib/runner.js
CHANGED
|
@@ -59,13 +59,17 @@ function generateRunId() {
|
|
|
59
59
|
export async function executeJob(config) {
|
|
60
60
|
const resolvedPrompt = resolveJobPrompt(config);
|
|
61
61
|
const cmd = buildJobCommand(config, resolvedPrompt);
|
|
62
|
-
const
|
|
62
|
+
const useSandbox = config.sandbox !== false;
|
|
63
|
+
const overlayHome = useSandbox ? prepareJobHome(config) : undefined;
|
|
63
64
|
const runId = generateRunId();
|
|
64
65
|
const runDir = getRunDir(config.name, runId);
|
|
65
66
|
fs.mkdirSync(runDir, { recursive: true });
|
|
66
67
|
const stdoutPath = path.join(runDir, 'stdout.log');
|
|
67
68
|
const stdoutFd = fs.openSync(stdoutPath, 'w');
|
|
68
|
-
|
|
69
|
+
let spawnEnv = useSandbox ? buildSpawnEnv(overlayHome) : { ...process.env };
|
|
70
|
+
if (config.timezone) {
|
|
71
|
+
spawnEnv.TZ = config.timezone;
|
|
72
|
+
}
|
|
69
73
|
const meta = {
|
|
70
74
|
jobName: config.name,
|
|
71
75
|
runId,
|
|
@@ -145,13 +149,17 @@ export async function executeJob(config) {
|
|
|
145
149
|
export async function executeJobDetached(config) {
|
|
146
150
|
const resolvedPrompt = resolveJobPrompt(config);
|
|
147
151
|
const cmd = buildJobCommand(config, resolvedPrompt);
|
|
148
|
-
const
|
|
152
|
+
const useSandbox = config.sandbox !== false;
|
|
153
|
+
const overlayHome = useSandbox ? prepareJobHome(config) : undefined;
|
|
149
154
|
const runId = generateRunId();
|
|
150
155
|
const runDir = getRunDir(config.name, runId);
|
|
151
156
|
fs.mkdirSync(runDir, { recursive: true });
|
|
152
157
|
const stdoutPath = path.join(runDir, 'stdout.log');
|
|
153
158
|
const stdoutFd = fs.openSync(stdoutPath, 'w');
|
|
154
|
-
|
|
159
|
+
let spawnEnv = useSandbox ? buildSpawnEnv(overlayHome) : { ...process.env };
|
|
160
|
+
if (config.timezone) {
|
|
161
|
+
spawnEnv.TZ = config.timezone;
|
|
162
|
+
}
|
|
155
163
|
const meta = {
|
|
156
164
|
jobName: config.name,
|
|
157
165
|
runId,
|
package/dist/lib/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/lib/sandbox.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/lib/sandbox.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAqC3C,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAc5G;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAmBxD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAK/C;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA8B5E;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CA4EjF;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAiChF;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAqBjF"}
|
package/dist/lib/sandbox.js
CHANGED
|
@@ -25,17 +25,13 @@ const ENV_ALLOWLIST = [
|
|
|
25
25
|
'NO_COLOR',
|
|
26
26
|
'FORCE_COLOR',
|
|
27
27
|
];
|
|
28
|
-
|
|
28
|
+
// Tools safe to grant as wildcards (no filesystem access)
|
|
29
|
+
const SAFE_TOOLS = {
|
|
29
30
|
web_search: 'WebSearch(*)',
|
|
30
31
|
web_fetch: 'WebFetch(*)',
|
|
31
|
-
bash: 'Bash(*)',
|
|
32
|
-
read: 'Read(*)',
|
|
33
|
-
write: 'Write(*)',
|
|
34
|
-
edit: 'Edit(*)',
|
|
35
|
-
glob: 'Glob(*)',
|
|
36
|
-
grep: 'Grep(*)',
|
|
37
|
-
notebook_edit: 'NotebookEdit(*)',
|
|
38
32
|
};
|
|
33
|
+
// Bare tool names that get scoped to allow.dirs, never wildcarded
|
|
34
|
+
const DIR_SCOPED_TOOLS = new Set(['read', 'write', 'edit', 'glob', 'grep', 'notebook_edit']);
|
|
39
35
|
export function buildSpawnEnv(overlayHome, extraEnv) {
|
|
40
36
|
const env = { HOME: overlayHome };
|
|
41
37
|
for (const key of ENV_ALLOWLIST) {
|
|
@@ -77,8 +73,18 @@ export function cleanJobHome(name) {
|
|
|
77
73
|
}
|
|
78
74
|
export function symlinkAllowedDirs(overlayHome, dirs) {
|
|
79
75
|
for (const dir of dirs) {
|
|
80
|
-
const
|
|
81
|
-
|
|
76
|
+
const expanded = dir.replace(/^~/, REAL_HOME);
|
|
77
|
+
// Resolve .. and symlinks to prevent path traversal outside HOME
|
|
78
|
+
let realPath;
|
|
79
|
+
try {
|
|
80
|
+
// Use realpath if the directory exists (resolves symlinks)
|
|
81
|
+
realPath = fs.realpathSync(expanded);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Directory doesn't exist yet — resolve .. components without following symlinks
|
|
85
|
+
realPath = path.resolve(expanded);
|
|
86
|
+
}
|
|
87
|
+
if (!realPath.startsWith(REAL_HOME + path.sep) && realPath !== REAL_HOME) {
|
|
82
88
|
continue;
|
|
83
89
|
}
|
|
84
90
|
const relativePath = path.relative(REAL_HOME, realPath);
|
|
@@ -97,20 +103,49 @@ export function generateClaudeConfig(overlayHome, config) {
|
|
|
97
103
|
const claudeDir = path.join(overlayHome, '.claude');
|
|
98
104
|
fs.mkdirSync(claudeDir, { recursive: true });
|
|
99
105
|
const allowPermissions = [];
|
|
106
|
+
const enabledTools = new Set(config.allow?.tools || []);
|
|
100
107
|
if (config.allow?.tools) {
|
|
101
108
|
for (const tool of config.allow.tools) {
|
|
102
|
-
|
|
103
|
-
|
|
109
|
+
// Safe wildcards (no filesystem access)
|
|
110
|
+
if (tool in SAFE_TOOLS) {
|
|
111
|
+
allowPermissions.push(SAFE_TOOLS[tool]);
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
// Bare filesystem tool names — permissions come from allow.dirs
|
|
115
|
+
if (DIR_SCOPED_TOOLS.has(tool)) {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
// Bare "bash" — must use scoped pattern like "Bash(git *)"
|
|
119
|
+
if (tool === 'bash') {
|
|
120
|
+
throw new Error('Bare "bash" not allowed in sandbox — use scoped patterns like "Bash(git *)"');
|
|
121
|
+
}
|
|
122
|
+
// Reject wildcard patterns like Bash(*), Read(*)
|
|
123
|
+
if (/^\w+\(\*\)$/.test(tool)) {
|
|
124
|
+
throw new Error(`Wildcard "${tool}" not allowed in sandbox — use scoped patterns`);
|
|
125
|
+
}
|
|
126
|
+
// Scoped pattern like "Bash(git *)" — pass through
|
|
127
|
+
allowPermissions.push(tool);
|
|
104
128
|
}
|
|
105
129
|
}
|
|
130
|
+
// Scope filesystem tools to allowed dirs
|
|
106
131
|
if (config.allow?.dirs) {
|
|
107
132
|
for (const dir of config.allow.dirs) {
|
|
108
133
|
const resolved = dir.replace(/^~/, REAL_HOME);
|
|
134
|
+
// Read always granted for allowed dirs
|
|
109
135
|
allowPermissions.push(`Read(${resolved}/**)`);
|
|
110
136
|
if (config.mode === 'edit') {
|
|
111
137
|
allowPermissions.push(`Write(${resolved}/**)`);
|
|
112
138
|
allowPermissions.push(`Edit(${resolved}/**)`);
|
|
113
139
|
}
|
|
140
|
+
if (enabledTools.has('glob')) {
|
|
141
|
+
allowPermissions.push(`Glob(${resolved}/**)`);
|
|
142
|
+
}
|
|
143
|
+
if (enabledTools.has('grep')) {
|
|
144
|
+
allowPermissions.push(`Grep(${resolved}/**)`);
|
|
145
|
+
}
|
|
146
|
+
if (enabledTools.has('notebook_edit') && config.mode === 'edit') {
|
|
147
|
+
allowPermissions.push(`NotebookEdit(${resolved}/**)`);
|
|
148
|
+
}
|
|
114
149
|
}
|
|
115
150
|
}
|
|
116
151
|
const settings = {
|