@swarmify/agents-cli 1.5.14 → 1.5.16

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.

Potentially problematic release.


This version of @swarmify/agents-cli might be problematic. Click here for more details.

Files changed (50) hide show
  1. package/README.md +86 -291
  2. package/dist/index.js +879 -197
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/daemon.d.ts +22 -0
  5. package/dist/lib/daemon.d.ts.map +1 -0
  6. package/dist/lib/daemon.js +303 -0
  7. package/dist/lib/daemon.js.map +1 -0
  8. package/dist/lib/drive-server.d.ts +9 -0
  9. package/dist/lib/drive-server.d.ts.map +1 -0
  10. package/dist/lib/drive-server.js +217 -0
  11. package/dist/lib/drive-server.js.map +1 -0
  12. package/dist/lib/drives.d.ts +34 -0
  13. package/dist/lib/drives.d.ts.map +1 -0
  14. package/dist/lib/drives.js +267 -0
  15. package/dist/lib/drives.js.map +1 -0
  16. package/dist/lib/jobs.d.ts +53 -0
  17. package/dist/lib/jobs.d.ts.map +1 -0
  18. package/dist/lib/jobs.js +242 -0
  19. package/dist/lib/jobs.js.map +1 -0
  20. package/dist/lib/manifest.js +1 -1
  21. package/dist/lib/manifest.js.map +1 -1
  22. package/dist/lib/runner.d.ts +12 -0
  23. package/dist/lib/runner.d.ts.map +1 -0
  24. package/dist/lib/runner.js +266 -0
  25. package/dist/lib/runner.js.map +1 -0
  26. package/dist/lib/sandbox.d.ts +10 -0
  27. package/dist/lib/sandbox.d.ts.map +1 -0
  28. package/dist/lib/sandbox.js +166 -0
  29. package/dist/lib/sandbox.js.map +1 -0
  30. package/dist/lib/scheduler.d.ts +18 -0
  31. package/dist/lib/scheduler.d.ts.map +1 -0
  32. package/dist/lib/scheduler.js +64 -0
  33. package/dist/lib/scheduler.js.map +1 -0
  34. package/dist/lib/shims.d.ts +32 -0
  35. package/dist/lib/shims.d.ts.map +1 -0
  36. package/dist/lib/shims.js +181 -0
  37. package/dist/lib/shims.js.map +1 -0
  38. package/dist/lib/state.d.ts +5 -0
  39. package/dist/lib/state.d.ts.map +1 -1
  40. package/dist/lib/state.js +35 -0
  41. package/dist/lib/state.js.map +1 -1
  42. package/dist/lib/types.d.ts +10 -0
  43. package/dist/lib/types.d.ts.map +1 -1
  44. package/dist/lib/types.js.map +1 -1
  45. package/dist/lib/versions.d.ts +84 -0
  46. package/dist/lib/versions.d.ts.map +1 -0
  47. package/dist/lib/versions.js +297 -0
  48. package/dist/lib/versions.js.map +1 -0
  49. package/package.json +8 -5
  50. package/scripts/postinstall.js +72 -0
@@ -0,0 +1,267 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import * as yaml from 'yaml';
4
+ import { getDrivesDir, ensureAgentsDir } from './state.js';
5
+ const FRONTMATTER_RE = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/;
6
+ function parseDriveFile(filePath) {
7
+ try {
8
+ const raw = fs.readFileSync(filePath, 'utf-8');
9
+ const name = path.basename(filePath, '.md');
10
+ const match = raw.match(FRONTMATTER_RE);
11
+ if (match) {
12
+ const frontmatter = (yaml.parse(match[1]) || {});
13
+ frontmatter.name = frontmatter.name || name;
14
+ return { name, path: filePath, frontmatter, content: match[2] };
15
+ }
16
+ return { name, path: filePath, frontmatter: { name }, content: raw };
17
+ }
18
+ catch {
19
+ return null;
20
+ }
21
+ }
22
+ function serializeDrive(frontmatter, content) {
23
+ const fm = {};
24
+ if (frontmatter.name)
25
+ fm.name = frontmatter.name;
26
+ if (frontmatter.description)
27
+ fm.description = frontmatter.description;
28
+ if (frontmatter.project)
29
+ fm.project = frontmatter.project;
30
+ if (frontmatter.repo)
31
+ fm.repo = frontmatter.repo;
32
+ fm.updated = new Date().toISOString();
33
+ return `---\n${yaml.stringify(fm).trimEnd()}\n---\n${content}`;
34
+ }
35
+ export function createDrive(name, description) {
36
+ ensureAgentsDir();
37
+ const drivesDir = getDrivesDir();
38
+ const filePath = path.join(drivesDir, `${name}.md`);
39
+ const dirPath = path.join(drivesDir, name);
40
+ if (fs.existsSync(filePath) || (fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory())) {
41
+ throw new Error(`Drive '${name}' already exists`);
42
+ }
43
+ const frontmatter = { name };
44
+ if (description)
45
+ frontmatter.description = description;
46
+ const content = `\n# ${name}\n`;
47
+ fs.writeFileSync(filePath, serializeDrive(frontmatter, content), 'utf-8');
48
+ return filePath;
49
+ }
50
+ export function readDrive(name) {
51
+ ensureAgentsDir();
52
+ const drivesDir = getDrivesDir();
53
+ const filePath = path.join(drivesDir, `${name}.md`);
54
+ if (fs.existsSync(filePath)) {
55
+ return parseDriveFile(filePath);
56
+ }
57
+ const dirPath = path.join(drivesDir, name);
58
+ if (fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory()) {
59
+ const overviewPath = path.join(dirPath, 'overview.md');
60
+ if (fs.existsSync(overviewPath)) {
61
+ return parseDriveFile(overviewPath);
62
+ }
63
+ const mdFiles = fs.readdirSync(dirPath).filter((f) => f.endsWith('.md')).sort();
64
+ if (mdFiles.length > 0) {
65
+ return parseDriveFile(path.join(dirPath, mdFiles[0]));
66
+ }
67
+ }
68
+ return null;
69
+ }
70
+ export function readDriveFiles(name) {
71
+ ensureAgentsDir();
72
+ const drivesDir = getDrivesDir();
73
+ const filePath = path.join(drivesDir, `${name}.md`);
74
+ if (fs.existsSync(filePath)) {
75
+ const drive = parseDriveFile(filePath);
76
+ return drive ? [drive] : [];
77
+ }
78
+ const dirPath = path.join(drivesDir, name);
79
+ if (fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory()) {
80
+ const files = [];
81
+ for (const f of fs.readdirSync(dirPath).filter((f) => f.endsWith('.md')).sort()) {
82
+ const drive = parseDriveFile(path.join(dirPath, f));
83
+ if (drive)
84
+ files.push(drive);
85
+ }
86
+ return files;
87
+ }
88
+ return [];
89
+ }
90
+ export function listDrives() {
91
+ ensureAgentsDir();
92
+ const drivesDir = getDrivesDir();
93
+ if (!fs.existsSync(drivesDir))
94
+ return [];
95
+ const entries = fs.readdirSync(drivesDir, { withFileTypes: true });
96
+ const drives = [];
97
+ for (const entry of entries) {
98
+ if (entry.name === 'notes')
99
+ continue;
100
+ if (entry.isFile() && entry.name.endsWith('.md')) {
101
+ const drive = parseDriveFile(path.join(drivesDir, entry.name));
102
+ if (drive)
103
+ drives.push(drive.frontmatter);
104
+ }
105
+ else if (entry.isDirectory()) {
106
+ const overviewPath = path.join(drivesDir, entry.name, 'overview.md');
107
+ if (fs.existsSync(overviewPath)) {
108
+ const drive = parseDriveFile(overviewPath);
109
+ if (drive) {
110
+ drive.frontmatter.name = entry.name;
111
+ drives.push(drive.frontmatter);
112
+ }
113
+ }
114
+ else {
115
+ drives.push({ name: entry.name });
116
+ }
117
+ }
118
+ }
119
+ return drives;
120
+ }
121
+ export function deleteDrive(name) {
122
+ const drivesDir = getDrivesDir();
123
+ const filePath = path.join(drivesDir, `${name}.md`);
124
+ if (fs.existsSync(filePath)) {
125
+ fs.unlinkSync(filePath);
126
+ return true;
127
+ }
128
+ const dirPath = path.join(drivesDir, name);
129
+ if (fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory()) {
130
+ fs.rmSync(dirPath, { recursive: true, force: true });
131
+ return true;
132
+ }
133
+ return false;
134
+ }
135
+ export function driveExists(name) {
136
+ const drivesDir = getDrivesDir();
137
+ const filePath = path.join(drivesDir, `${name}.md`);
138
+ const dirPath = path.join(drivesDir, name);
139
+ return fs.existsSync(filePath) || (fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory());
140
+ }
141
+ export function updateDriveFrontmatter(name, updates) {
142
+ const drive = readDrive(name);
143
+ if (!drive)
144
+ throw new Error(`Drive '${name}' not found`);
145
+ const newFrontmatter = { ...drive.frontmatter, ...updates };
146
+ fs.writeFileSync(drive.path, serializeDrive(newFrontmatter, drive.content), 'utf-8');
147
+ }
148
+ export function getDriveContent(name) {
149
+ const files = readDriveFiles(name);
150
+ if (files.length === 0)
151
+ return null;
152
+ if (files.length === 1) {
153
+ return files[0].content;
154
+ }
155
+ return files.map((f) => `## ${path.basename(f.path, '.md')}\n\n${f.content}`).join('\n\n');
156
+ }
157
+ export function getDriveForProject(projectPath) {
158
+ const resolved = path.resolve(projectPath);
159
+ const drives = listDrives();
160
+ for (const drive of drives) {
161
+ if (!drive.project)
162
+ continue;
163
+ const driveProject = drive.project.startsWith('~')
164
+ ? path.join(process.env.HOME || '', drive.project.slice(1))
165
+ : path.resolve(drive.project);
166
+ if (driveProject === resolved)
167
+ return drive;
168
+ }
169
+ return null;
170
+ }
171
+ function ensureDriveIsDirectory(driveName) {
172
+ const drivesDir = getDrivesDir();
173
+ const filePath = path.join(drivesDir, `${driveName}.md`);
174
+ const dirPath = path.join(drivesDir, driveName);
175
+ if (fs.existsSync(filePath) && !fs.existsSync(dirPath)) {
176
+ fs.mkdirSync(dirPath, { recursive: true });
177
+ fs.renameSync(filePath, path.join(dirPath, 'overview.md'));
178
+ }
179
+ }
180
+ export function addNote(driveName, title, content) {
181
+ if (!driveExists(driveName)) {
182
+ throw new Error(`Drive '${driveName}' not found`);
183
+ }
184
+ ensureDriveIsDirectory(driveName);
185
+ const drivesDir = getDrivesDir();
186
+ const notesDir = path.join(drivesDir, driveName, 'notes');
187
+ fs.mkdirSync(notesDir, { recursive: true });
188
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
189
+ const slug = title.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/(^-|-$)/g, '');
190
+ const fileName = `${timestamp}-${slug}.md`;
191
+ const filePath = path.join(notesDir, fileName);
192
+ const noteContent = `---\ntitle: ${title}\ncreated: ${new Date().toISOString()}\n---\n\n${content}\n`;
193
+ fs.writeFileSync(filePath, noteContent, 'utf-8');
194
+ return filePath;
195
+ }
196
+ export function isDriveLarge(name) {
197
+ const drivesDir = getDrivesDir();
198
+ const filePath = path.join(drivesDir, `${name}.md`);
199
+ if (fs.existsSync(filePath)) {
200
+ const stats = fs.statSync(filePath);
201
+ return stats.size > 50 * 1024;
202
+ }
203
+ const dirPath = path.join(drivesDir, name);
204
+ if (fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory()) {
205
+ const files = fs.readdirSync(dirPath, { recursive: true });
206
+ return files.filter((f) => f.endsWith('.md')).length > 20;
207
+ }
208
+ return false;
209
+ }
210
+ export function discoverDrivesFromRepo(repoPath) {
211
+ const drivesPath = path.join(repoPath, 'drives');
212
+ if (!fs.existsSync(drivesPath))
213
+ return [];
214
+ const entries = fs.readdirSync(drivesPath, { withFileTypes: true });
215
+ const result = [];
216
+ for (const entry of entries) {
217
+ if (entry.isFile() && entry.name.endsWith('.md')) {
218
+ result.push({
219
+ name: entry.name.replace(/\.md$/, ''),
220
+ path: path.join(drivesPath, entry.name),
221
+ });
222
+ }
223
+ else if (entry.isDirectory() && entry.name !== 'notes') {
224
+ result.push({
225
+ name: entry.name,
226
+ path: path.join(drivesPath, entry.name),
227
+ });
228
+ }
229
+ }
230
+ return result;
231
+ }
232
+ export function installDriveFromSource(sourcePath, name) {
233
+ try {
234
+ const drivesDir = getDrivesDir();
235
+ ensureAgentsDir();
236
+ const stat = fs.statSync(sourcePath);
237
+ if (stat.isDirectory()) {
238
+ const destDir = path.join(drivesDir, name);
239
+ fs.cpSync(sourcePath, destDir, { recursive: true });
240
+ }
241
+ else {
242
+ const destFile = path.join(drivesDir, `${name}.md`);
243
+ fs.copyFileSync(sourcePath, destFile);
244
+ }
245
+ return { success: true };
246
+ }
247
+ catch (err) {
248
+ return { success: false, error: err.message };
249
+ }
250
+ }
251
+ export function driveContentMatches(name, sourcePath) {
252
+ try {
253
+ const drivesDir = getDrivesDir();
254
+ const stat = fs.statSync(sourcePath);
255
+ if (stat.isFile()) {
256
+ const destFile = path.join(drivesDir, `${name}.md`);
257
+ if (!fs.existsSync(destFile))
258
+ return false;
259
+ return fs.readFileSync(sourcePath, 'utf-8') === fs.readFileSync(destFile, 'utf-8');
260
+ }
261
+ return false;
262
+ }
263
+ catch {
264
+ return false;
265
+ }
266
+ }
267
+ //# sourceMappingURL=drives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drives.js","sourceRoot":"","sources":["../../src/lib/drives.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { AgentId } from './types.js';
2
+ export interface JobAllowConfig {
3
+ tools?: string[];
4
+ sites?: string[];
5
+ dirs?: string[];
6
+ }
7
+ export interface JobConfig {
8
+ name: string;
9
+ schedule: string;
10
+ agent: AgentId;
11
+ mode: 'plan' | 'edit';
12
+ effort: 'fast' | 'default' | 'detailed';
13
+ timeout: string;
14
+ enabled: boolean;
15
+ prompt: string;
16
+ allow?: JobAllowConfig;
17
+ config?: Record<string, unknown>;
18
+ version?: string;
19
+ }
20
+ export interface RunMeta {
21
+ jobName: string;
22
+ runId: string;
23
+ agent: AgentId;
24
+ pid: number | null;
25
+ status: 'running' | 'completed' | 'failed' | 'timeout';
26
+ startedAt: string;
27
+ completedAt: string | null;
28
+ exitCode: number | null;
29
+ }
30
+ export declare function listJobs(): JobConfig[];
31
+ export declare function readJob(name: string): JobConfig | null;
32
+ export declare function writeJob(config: JobConfig): void;
33
+ export declare function deleteJob(name: string): boolean;
34
+ export declare function setJobEnabled(name: string, enabled: boolean): void;
35
+ export declare function validateJob(config: Partial<JobConfig>): string[];
36
+ export declare function resolveJobPrompt(config: JobConfig): string;
37
+ export declare function parseTimeout(timeout: string): number | null;
38
+ export declare function listRuns(jobName: string): RunMeta[];
39
+ export declare function getLatestRun(jobName: string): RunMeta | null;
40
+ export declare function writeRunMeta(meta: RunMeta): void;
41
+ export declare function readRunMeta(jobName: string, runId: string): RunMeta | null;
42
+ export declare function getRunDir(jobName: string, runId: string): string;
43
+ export declare function discoverJobsFromRepo(repoPath: string): Array<{
44
+ name: string;
45
+ path: string;
46
+ }>;
47
+ export declare function jobExists(name: string): boolean;
48
+ export declare function jobContentMatches(name: string, sourcePath: string): boolean;
49
+ export declare function installJobFromSource(sourcePath: string, name: string): {
50
+ success: boolean;
51
+ error?: string;
52
+ };
53
+ //# sourceMappingURL=jobs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/lib/jobs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,242 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import * as yaml from 'yaml';
4
+ import { getJobsDir, getRunsDir, ensureAgentsDir } from './state.js';
5
+ const JOB_DEFAULTS = {
6
+ mode: 'plan',
7
+ effort: 'default',
8
+ timeout: '30m',
9
+ enabled: true,
10
+ };
11
+ export function listJobs() {
12
+ ensureAgentsDir();
13
+ const jobsDir = getJobsDir();
14
+ if (!fs.existsSync(jobsDir))
15
+ return [];
16
+ const files = fs.readdirSync(jobsDir).filter((f) => f.endsWith('.yml') || f.endsWith('.yaml'));
17
+ const jobs = [];
18
+ for (const file of files) {
19
+ const job = readJobFile(path.join(jobsDir, file));
20
+ if (job)
21
+ jobs.push(job);
22
+ }
23
+ return jobs;
24
+ }
25
+ export function readJob(name) {
26
+ ensureAgentsDir();
27
+ const jobsDir = getJobsDir();
28
+ for (const ext of ['.yml', '.yaml']) {
29
+ const filePath = path.join(jobsDir, name + ext);
30
+ if (fs.existsSync(filePath)) {
31
+ return readJobFile(filePath);
32
+ }
33
+ }
34
+ return null;
35
+ }
36
+ function readJobFile(filePath) {
37
+ try {
38
+ const content = fs.readFileSync(filePath, 'utf-8');
39
+ const parsed = yaml.parse(content);
40
+ if (!parsed || typeof parsed !== 'object')
41
+ return null;
42
+ return {
43
+ ...JOB_DEFAULTS,
44
+ ...parsed,
45
+ name: parsed.name || path.basename(filePath).replace(/\.ya?ml$/, ''),
46
+ };
47
+ }
48
+ catch {
49
+ return null;
50
+ }
51
+ }
52
+ export function writeJob(config) {
53
+ ensureAgentsDir();
54
+ const jobsDir = getJobsDir();
55
+ const filePath = path.join(jobsDir, config.name + '.yml');
56
+ const output = { ...config };
57
+ if (output.mode === 'plan')
58
+ delete output.mode;
59
+ if (output.effort === 'default')
60
+ delete output.effort;
61
+ if (output.timeout === '30m')
62
+ delete output.timeout;
63
+ if (output.enabled === true)
64
+ delete output.enabled;
65
+ fs.writeFileSync(filePath, yaml.stringify(output), 'utf-8');
66
+ }
67
+ export function deleteJob(name) {
68
+ const jobsDir = getJobsDir();
69
+ for (const ext of ['.yml', '.yaml']) {
70
+ const filePath = path.join(jobsDir, name + ext);
71
+ if (fs.existsSync(filePath)) {
72
+ fs.unlinkSync(filePath);
73
+ return true;
74
+ }
75
+ }
76
+ return false;
77
+ }
78
+ export function setJobEnabled(name, enabled) {
79
+ const job = readJob(name);
80
+ if (!job)
81
+ throw new Error(`Job '${name}' not found`);
82
+ job.enabled = enabled;
83
+ writeJob(job);
84
+ }
85
+ export function validateJob(config) {
86
+ const errors = [];
87
+ if (!config.name || typeof config.name !== 'string') {
88
+ errors.push('name is required');
89
+ }
90
+ if (!config.schedule || typeof config.schedule !== 'string') {
91
+ errors.push('schedule (cron expression) is required');
92
+ }
93
+ if (!config.agent || typeof config.agent !== 'string') {
94
+ errors.push('agent is required');
95
+ }
96
+ const validJobAgents = ['claude', 'codex', 'gemini', 'cursor', 'opencode'];
97
+ if (config.agent && !validJobAgents.includes(config.agent)) {
98
+ errors.push(`agent must be one of: ${validJobAgents.join(', ')}`);
99
+ }
100
+ if (config.mode && !['plan', 'edit'].includes(config.mode)) {
101
+ errors.push('mode must be plan or edit');
102
+ }
103
+ if (config.effort && !['fast', 'default', 'detailed'].includes(config.effort)) {
104
+ errors.push('effort must be fast, default, or detailed');
105
+ }
106
+ if (!config.prompt || typeof config.prompt !== 'string') {
107
+ errors.push('prompt is required');
108
+ }
109
+ if (config.timeout && !parseTimeout(config.timeout)) {
110
+ errors.push('timeout must be like 30m, 2h, 1h30m');
111
+ }
112
+ return errors;
113
+ }
114
+ export function resolveJobPrompt(config) {
115
+ const now = new Date();
116
+ const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
117
+ let prompt = config.prompt;
118
+ prompt = prompt.replace(/\{day\}/g, days[now.getDay()]);
119
+ prompt = prompt.replace(/\{date\}/g, now.toISOString().split('T')[0]);
120
+ prompt = prompt.replace(/\{time\}/g, now.toTimeString().split(' ')[0]);
121
+ prompt = prompt.replace(/\{job_name\}/g, config.name);
122
+ const latestRun = getLatestRun(config.name);
123
+ if (latestRun) {
124
+ const reportPath = path.join(getRunsDir(), config.name, latestRun.runId, 'report.md');
125
+ if (fs.existsSync(reportPath)) {
126
+ const report = fs.readFileSync(reportPath, 'utf-8');
127
+ prompt = prompt.replace(/\{last_report\}/g, report);
128
+ }
129
+ else {
130
+ prompt = prompt.replace(/\{last_report\}/g, '(no previous report)');
131
+ }
132
+ }
133
+ else {
134
+ prompt = prompt.replace(/\{last_report\}/g, '(no previous report)');
135
+ }
136
+ return prompt;
137
+ }
138
+ export function parseTimeout(timeout) {
139
+ const match = timeout.match(/^(?:(\d+)h)?(?:(\d+)m)?$/);
140
+ if (!match)
141
+ return null;
142
+ const hours = parseInt(match[1] || '0', 10);
143
+ const minutes = parseInt(match[2] || '0', 10);
144
+ const ms = (hours * 60 + minutes) * 60 * 1000;
145
+ return ms > 0 ? ms : null;
146
+ }
147
+ export function listRuns(jobName) {
148
+ const runsDir = getRunsDir();
149
+ const jobRunsDir = path.join(runsDir, jobName);
150
+ if (!fs.existsSync(jobRunsDir))
151
+ return [];
152
+ const entries = fs.readdirSync(jobRunsDir, { withFileTypes: true })
153
+ .filter((e) => e.isDirectory())
154
+ .map((e) => e.name)
155
+ .sort();
156
+ const runs = [];
157
+ for (const runId of entries) {
158
+ const meta = readRunMeta(jobName, runId);
159
+ if (meta)
160
+ runs.push(meta);
161
+ }
162
+ return runs;
163
+ }
164
+ export function getLatestRun(jobName) {
165
+ const runs = listRuns(jobName);
166
+ return runs.length > 0 ? runs[runs.length - 1] : null;
167
+ }
168
+ export function writeRunMeta(meta) {
169
+ ensureAgentsDir();
170
+ const runDir = path.join(getRunsDir(), meta.jobName, meta.runId);
171
+ fs.mkdirSync(runDir, { recursive: true });
172
+ fs.writeFileSync(path.join(runDir, 'meta.json'), JSON.stringify(meta, null, 2), 'utf-8');
173
+ }
174
+ export function readRunMeta(jobName, runId) {
175
+ const metaPath = path.join(getRunsDir(), jobName, runId, 'meta.json');
176
+ if (!fs.existsSync(metaPath))
177
+ return null;
178
+ try {
179
+ return JSON.parse(fs.readFileSync(metaPath, 'utf-8'));
180
+ }
181
+ catch {
182
+ return null;
183
+ }
184
+ }
185
+ export function getRunDir(jobName, runId) {
186
+ return path.join(getRunsDir(), jobName, runId);
187
+ }
188
+ export function discoverJobsFromRepo(repoPath) {
189
+ const jobsPath = path.join(repoPath, 'jobs');
190
+ if (!fs.existsSync(jobsPath))
191
+ return [];
192
+ return fs.readdirSync(jobsPath)
193
+ .filter((f) => f.endsWith('.yml') || f.endsWith('.yaml'))
194
+ .map((f) => ({
195
+ name: f.replace(/\.ya?ml$/, ''),
196
+ path: path.join(jobsPath, f),
197
+ }));
198
+ }
199
+ export function jobExists(name) {
200
+ return readJob(name) !== null;
201
+ }
202
+ export function jobContentMatches(name, sourcePath) {
203
+ const existing = readJob(name);
204
+ if (!existing)
205
+ return false;
206
+ try {
207
+ const sourceContent = fs.readFileSync(sourcePath, 'utf-8');
208
+ const sourceJob = yaml.parse(sourceContent);
209
+ if (!sourceJob)
210
+ return false;
211
+ const existingNormalized = yaml.stringify(existing);
212
+ const fullSource = { ...JOB_DEFAULTS, ...sourceJob, name: sourceJob.name || name };
213
+ const sourceNormalized = yaml.stringify(fullSource);
214
+ return existingNormalized === sourceNormalized;
215
+ }
216
+ catch {
217
+ return false;
218
+ }
219
+ }
220
+ export function installJobFromSource(sourcePath, name) {
221
+ try {
222
+ const content = fs.readFileSync(sourcePath, 'utf-8');
223
+ const parsed = yaml.parse(content);
224
+ if (!parsed)
225
+ return { success: false, error: 'Invalid YAML' };
226
+ const config = {
227
+ ...JOB_DEFAULTS,
228
+ ...parsed,
229
+ name: parsed.name || name,
230
+ };
231
+ const errors = validateJob(config);
232
+ if (errors.length > 0) {
233
+ return { success: false, error: errors.join(', ') };
234
+ }
235
+ writeJob(config);
236
+ return { success: true };
237
+ }
238
+ catch (err) {
239
+ return { success: false, error: err.message };
240
+ }
241
+ }
242
+ //# sourceMappingURL=jobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/lib/jobs.ts"],"names":[],"mappings":"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"}
@@ -42,7 +42,7 @@ export function createDefaultManifest() {
42
42
  defaults: {
43
43
  method: 'symlink',
44
44
  scope: 'global',
45
- agents: ['claude', 'codex', 'gemini'],
45
+ agents: ['claude', 'codex', 'gemini', 'cursor', 'opencode'],
46
46
  },
47
47
  };
48
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/lib/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAE/C,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAa,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAkB;IAClD,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAC5D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACvD,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,QAAkB;IAChE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC5C,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,IAAI,EAAE;YACJ,MAAM,EAAE;gBACN,OAAO,EAAE,2BAA2B;gBACpC,OAAO,EAAE,QAAQ;aAClB;YACD,KAAK,EAAE;gBACL,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE,QAAQ;aAClB;YACD,MAAM,EAAE;gBACN,OAAO,EAAE,oBAAoB;gBAC7B,OAAO,EAAE,QAAQ;aAClB;SACF;QACD,YAAY,EAAE,EAAE;QAChB,GAAG,EAAE,EAAE;QACP,QAAQ,EAAE;YACR,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;SACtC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/lib/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAE/C,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAa,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAkB;IAClD,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAC5D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACvD,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,QAAkB;IAChE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC5C,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,IAAI,EAAE;YACJ,MAAM,EAAE;gBACN,OAAO,EAAE,2BAA2B;gBACpC,OAAO,EAAE,QAAQ;aAClB;YACD,KAAK,EAAE;gBACL,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE,QAAQ;aAClB;YACD,MAAM,EAAE;gBACN,OAAO,EAAE,oBAAoB;gBAC7B,OAAO,EAAE,QAAQ;aAClB;SACF;QACD,YAAY,EAAE,EAAE;QAChB,GAAG,EAAE,EAAE;QACP,QAAQ,EAAE;YACR,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC;SAC5D;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { JobConfig, RunMeta } from './jobs.js';
2
+ import type { AgentId } from './types.js';
3
+ export interface RunResult {
4
+ meta: RunMeta;
5
+ reportPath: string | null;
6
+ }
7
+ export declare function buildJobCommand(config: JobConfig, resolvedPrompt: string): string[];
8
+ export declare function executeJob(config: JobConfig): Promise<RunResult>;
9
+ export declare function executeJobDetached(config: JobConfig): Promise<RunMeta>;
10
+ export declare function extractReport(stdoutPath: string, agentType: AgentId): string | null;
11
+ export declare function monitorRunningJobs(): void;
12
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +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,CA8FtE;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAuC5E;AAkBD,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CA2CnF;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAkCzC"}