@swarmify/agents-cli 1.5.13 → 1.5.15

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.
Files changed (66) hide show
  1. package/README.md +93 -213
  2. package/dist/index.js +1194 -173
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/agents.d.ts.map +1 -1
  5. package/dist/lib/agents.js +19 -2
  6. package/dist/lib/agents.js.map +1 -1
  7. package/dist/lib/artifact-actions.d.ts +22 -0
  8. package/dist/lib/artifact-actions.d.ts.map +1 -0
  9. package/dist/lib/artifact-actions.js +55 -0
  10. package/dist/lib/artifact-actions.js.map +1 -0
  11. package/dist/lib/commands.d.ts.map +1 -1
  12. package/dist/lib/commands.js +3 -5
  13. package/dist/lib/commands.js.map +1 -1
  14. package/dist/lib/daemon.d.ts +22 -0
  15. package/dist/lib/daemon.d.ts.map +1 -0
  16. package/dist/lib/daemon.js +303 -0
  17. package/dist/lib/daemon.js.map +1 -0
  18. package/dist/lib/drive-server.d.ts +9 -0
  19. package/dist/lib/drive-server.d.ts.map +1 -0
  20. package/dist/lib/drive-server.js +217 -0
  21. package/dist/lib/drive-server.js.map +1 -0
  22. package/dist/lib/drives.d.ts +34 -0
  23. package/dist/lib/drives.d.ts.map +1 -0
  24. package/dist/lib/drives.js +267 -0
  25. package/dist/lib/drives.js.map +1 -0
  26. package/dist/lib/instructions.d.ts +31 -0
  27. package/dist/lib/instructions.d.ts.map +1 -0
  28. package/dist/lib/instructions.js +161 -0
  29. package/dist/lib/instructions.js.map +1 -0
  30. package/dist/lib/jobs.d.ts +53 -0
  31. package/dist/lib/jobs.d.ts.map +1 -0
  32. package/dist/lib/jobs.js +242 -0
  33. package/dist/lib/jobs.js.map +1 -0
  34. package/dist/lib/runner.d.ts +12 -0
  35. package/dist/lib/runner.d.ts.map +1 -0
  36. package/dist/lib/runner.js +266 -0
  37. package/dist/lib/runner.js.map +1 -0
  38. package/dist/lib/sandbox.d.ts +10 -0
  39. package/dist/lib/sandbox.d.ts.map +1 -0
  40. package/dist/lib/sandbox.js +166 -0
  41. package/dist/lib/sandbox.js.map +1 -0
  42. package/dist/lib/scheduler.d.ts +18 -0
  43. package/dist/lib/scheduler.d.ts.map +1 -0
  44. package/dist/lib/scheduler.js +64 -0
  45. package/dist/lib/scheduler.js.map +1 -0
  46. package/dist/lib/shims.d.ts +32 -0
  47. package/dist/lib/shims.d.ts.map +1 -0
  48. package/dist/lib/shims.js +175 -0
  49. package/dist/lib/shims.js.map +1 -0
  50. package/dist/lib/state.d.ts +5 -0
  51. package/dist/lib/state.d.ts.map +1 -1
  52. package/dist/lib/state.js +35 -0
  53. package/dist/lib/state.js.map +1 -1
  54. package/dist/lib/template.d.ts +24 -0
  55. package/dist/lib/template.d.ts.map +1 -0
  56. package/dist/lib/template.js +57 -0
  57. package/dist/lib/template.js.map +1 -0
  58. package/dist/lib/types.d.ts +11 -0
  59. package/dist/lib/types.d.ts.map +1 -1
  60. package/dist/lib/types.js.map +1 -1
  61. package/dist/lib/versions.d.ts +79 -0
  62. package/dist/lib/versions.d.ts.map +1 -0
  63. package/dist/lib/versions.js +289 -0
  64. package/dist/lib/versions.js.map +1 -0
  65. package/package.json +8 -5
  66. 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,31 @@
1
+ import type { AgentId } from './types.js';
2
+ export type InstructionsScope = 'user' | 'project';
3
+ export interface InstalledInstructions {
4
+ agentId: AgentId;
5
+ scope: InstructionsScope;
6
+ path: string;
7
+ exists: boolean;
8
+ }
9
+ export interface DiscoveredInstructions {
10
+ agentId: AgentId;
11
+ sourcePath: string;
12
+ filename: string;
13
+ }
14
+ export declare function getInstructionsPath(agentId: AgentId, scope: InstructionsScope, cwd?: string): string;
15
+ export declare function instructionsExists(agentId: AgentId, scope?: InstructionsScope, cwd?: string): boolean;
16
+ export declare function discoverInstructionsFromRepo(repoPath: string): DiscoveredInstructions[];
17
+ export declare function resolveInstructionsSource(repoPath: string, agentId: AgentId): string | null;
18
+ export declare function installInstructions(sourcePath: string, agentId: AgentId, method?: 'symlink' | 'copy'): {
19
+ path: string;
20
+ method: 'symlink' | 'copy';
21
+ error?: string;
22
+ };
23
+ export declare function uninstallInstructions(agentId: AgentId): boolean;
24
+ export declare function instructionsContentMatches(agentId: AgentId, sourcePath: string, scope?: InstructionsScope, cwd?: string): boolean;
25
+ export declare function listInstalledInstructionsWithScope(agentId: AgentId, cwd?: string): InstalledInstructions[];
26
+ export declare function promoteInstructionsToUser(agentId: AgentId, cwd?: string): {
27
+ success: boolean;
28
+ error?: string;
29
+ };
30
+ export declare function getInstructionsContent(agentId: AgentId, scope?: InstructionsScope, cwd?: string): string | null;
31
+ //# sourceMappingURL=instructions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/lib/instructions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAAC;AAEnD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,iBAAiB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CAMnH;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,GAAE,iBAA0B,EAAE,GAAG,GAAE,MAAsB,GAAG,OAAO,CAG5H;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,sBAAsB,EAAE,CA6BvF;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAqB3F;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,SAAS,GAAG,MAAe,GAClC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA4B9D;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAS/D;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,iBAA0B,EACjC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAcT;AAED,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,OAAO,EAChB,GAAG,GAAE,MAAsB,GAC1B,qBAAqB,EAAE,CAqBzB;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,GAAG,GAAE,MAAsB,GAC1B;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAoBtC;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,GAAE,iBAA0B,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAUtI"}
@@ -0,0 +1,161 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import { AGENTS, ALL_AGENT_IDS } from './agents.js';
4
+ function normalizeContent(content) {
5
+ return content.replace(/\r\n/g, '\n').trim();
6
+ }
7
+ export function getInstructionsPath(agentId, scope, cwd = process.cwd()) {
8
+ const agent = AGENTS[agentId];
9
+ if (scope === 'user') {
10
+ return path.join(agent.configDir, agent.instructionsFile);
11
+ }
12
+ return path.join(cwd, `.${agentId}`, agent.instructionsFile);
13
+ }
14
+ export function instructionsExists(agentId, scope = 'user', cwd = process.cwd()) {
15
+ const instructionsPath = getInstructionsPath(agentId, scope, cwd);
16
+ return fs.existsSync(instructionsPath);
17
+ }
18
+ export function discoverInstructionsFromRepo(repoPath) {
19
+ const instructions = [];
20
+ const instructionsDir = path.join(repoPath, 'instructions');
21
+ if (!fs.existsSync(instructionsDir)) {
22
+ return instructions;
23
+ }
24
+ for (const agentId of ALL_AGENT_IDS) {
25
+ const agent = AGENTS[agentId];
26
+ const possibleNames = [
27
+ `${agentId}.md`,
28
+ agent.instructionsFile,
29
+ ];
30
+ for (const filename of possibleNames) {
31
+ const sourcePath = path.join(instructionsDir, filename);
32
+ if (fs.existsSync(sourcePath)) {
33
+ instructions.push({
34
+ agentId,
35
+ sourcePath,
36
+ filename,
37
+ });
38
+ break;
39
+ }
40
+ }
41
+ }
42
+ return instructions;
43
+ }
44
+ export function resolveInstructionsSource(repoPath, agentId) {
45
+ const agent = AGENTS[agentId];
46
+ const instructionsDir = path.join(repoPath, 'instructions');
47
+ if (!fs.existsSync(instructionsDir)) {
48
+ return null;
49
+ }
50
+ const possibleNames = [
51
+ `${agentId}.md`,
52
+ agent.instructionsFile,
53
+ ];
54
+ for (const filename of possibleNames) {
55
+ const sourcePath = path.join(instructionsDir, filename);
56
+ if (fs.existsSync(sourcePath)) {
57
+ return sourcePath;
58
+ }
59
+ }
60
+ return null;
61
+ }
62
+ export function installInstructions(sourcePath, agentId, method = 'copy') {
63
+ const agent = AGENTS[agentId];
64
+ const targetPath = path.join(agent.configDir, agent.instructionsFile);
65
+ if (!fs.existsSync(agent.configDir)) {
66
+ fs.mkdirSync(agent.configDir, { recursive: true });
67
+ }
68
+ if (fs.existsSync(targetPath)) {
69
+ const stat = fs.lstatSync(targetPath);
70
+ if (stat.isSymbolicLink()) {
71
+ fs.unlinkSync(targetPath);
72
+ }
73
+ else {
74
+ fs.unlinkSync(targetPath);
75
+ }
76
+ }
77
+ try {
78
+ if (method === 'symlink') {
79
+ fs.symlinkSync(sourcePath, targetPath);
80
+ return { path: targetPath, method: 'symlink' };
81
+ }
82
+ fs.copyFileSync(sourcePath, targetPath);
83
+ return { path: targetPath, method: 'copy' };
84
+ }
85
+ catch (err) {
86
+ return { path: '', method: 'copy', error: err.message };
87
+ }
88
+ }
89
+ export function uninstallInstructions(agentId) {
90
+ const agent = AGENTS[agentId];
91
+ const targetPath = path.join(agent.configDir, agent.instructionsFile);
92
+ if (fs.existsSync(targetPath)) {
93
+ fs.unlinkSync(targetPath);
94
+ return true;
95
+ }
96
+ return false;
97
+ }
98
+ export function instructionsContentMatches(agentId, sourcePath, scope = 'user', cwd = process.cwd()) {
99
+ const installedPath = getInstructionsPath(agentId, scope, cwd);
100
+ if (!fs.existsSync(installedPath) || !fs.existsSync(sourcePath)) {
101
+ return false;
102
+ }
103
+ try {
104
+ const installedContent = fs.readFileSync(installedPath, 'utf-8');
105
+ const sourceContent = fs.readFileSync(sourcePath, 'utf-8');
106
+ return normalizeContent(installedContent) === normalizeContent(sourceContent);
107
+ }
108
+ catch {
109
+ return false;
110
+ }
111
+ }
112
+ export function listInstalledInstructionsWithScope(agentId, cwd = process.cwd()) {
113
+ const results = [];
114
+ const agent = AGENTS[agentId];
115
+ const userPath = path.join(agent.configDir, agent.instructionsFile);
116
+ results.push({
117
+ agentId,
118
+ scope: 'user',
119
+ path: userPath,
120
+ exists: fs.existsSync(userPath),
121
+ });
122
+ const projectPath = path.join(cwd, `.${agentId}`, agent.instructionsFile);
123
+ results.push({
124
+ agentId,
125
+ scope: 'project',
126
+ path: projectPath,
127
+ exists: fs.existsSync(projectPath),
128
+ });
129
+ return results;
130
+ }
131
+ export function promoteInstructionsToUser(agentId, cwd = process.cwd()) {
132
+ const agent = AGENTS[agentId];
133
+ const projectPath = path.join(cwd, `.${agentId}`, agent.instructionsFile);
134
+ if (!fs.existsSync(projectPath)) {
135
+ return { success: false, error: `Project instructions not found at ${projectPath}` };
136
+ }
137
+ if (!fs.existsSync(agent.configDir)) {
138
+ fs.mkdirSync(agent.configDir, { recursive: true });
139
+ }
140
+ const targetPath = path.join(agent.configDir, agent.instructionsFile);
141
+ try {
142
+ fs.copyFileSync(projectPath, targetPath);
143
+ return { success: true };
144
+ }
145
+ catch (err) {
146
+ return { success: false, error: err.message };
147
+ }
148
+ }
149
+ export function getInstructionsContent(agentId, scope = 'user', cwd = process.cwd()) {
150
+ const instructionsPath = getInstructionsPath(agentId, scope, cwd);
151
+ if (!fs.existsSync(instructionsPath)) {
152
+ return null;
153
+ }
154
+ try {
155
+ return fs.readFileSync(instructionsPath, 'utf-8');
156
+ }
157
+ catch {
158
+ return null;
159
+ }
160
+ }
161
+ //# sourceMappingURL=instructions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/lib/instructions.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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"}