@swarmify/agents-cli 1.8.1 → 1.9.1
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 +31 -0
- package/README.md +9 -9
- package/dist/commands/daemon.js +1 -1
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/routines.d.ts +3 -0
- package/dist/commands/routines.d.ts.map +1 -0
- package/dist/commands/{cron.js → routines.js} +23 -23
- package/dist/commands/routines.js.map +1 -0
- package/dist/commands/sessions.d.ts.map +1 -1
- package/dist/commands/sessions.js +135 -50
- package/dist/commands/sessions.js.map +1 -1
- package/dist/index.js +17 -15
- package/dist/index.js.map +1 -1
- package/dist/lib/__tests__/bugfixes.test.js +1 -1
- package/dist/lib/__tests__/bugfixes.test.js.map +1 -1
- package/dist/lib/agents.d.ts.map +1 -1
- package/dist/lib/agents.js +116 -0
- package/dist/lib/agents.js.map +1 -1
- package/dist/lib/daemon.js +1 -1
- package/dist/lib/daemon.js.map +1 -1
- package/dist/lib/exec.d.ts.map +1 -1
- package/dist/lib/exec.js +75 -1
- package/dist/lib/exec.js.map +1 -1
- package/dist/lib/{cron.d.ts → routines.d.ts} +1 -1
- package/dist/lib/routines.d.ts.map +1 -0
- package/dist/lib/{cron.js → routines.js} +8 -8
- package/dist/lib/routines.js.map +1 -0
- package/dist/lib/runner.d.ts +1 -1
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/lib/runner.js +1 -1
- package/dist/lib/runner.js.map +1 -1
- package/dist/lib/sandbox.d.ts +1 -1
- package/dist/lib/sandbox.d.ts.map +1 -1
- package/dist/lib/sandbox.js +2 -2
- package/dist/lib/sandbox.js.map +1 -1
- package/dist/lib/scheduler.d.ts +1 -1
- package/dist/lib/scheduler.d.ts.map +1 -1
- package/dist/lib/scheduler.js +1 -1
- package/dist/lib/scheduler.js.map +1 -1
- package/dist/lib/session/discover.d.ts +2 -1
- package/dist/lib/session/discover.d.ts.map +1 -1
- package/dist/lib/session/discover.js +266 -65
- package/dist/lib/session/discover.js.map +1 -1
- package/dist/lib/session/render.d.ts +3 -2
- package/dist/lib/session/render.d.ts.map +1 -1
- package/dist/lib/session/render.js +157 -33
- package/dist/lib/session/render.js.map +1 -1
- package/dist/lib/session/types.d.ts +3 -0
- package/dist/lib/session/types.d.ts.map +1 -1
- package/dist/lib/state.d.ts +3 -1
- package/dist/lib/state.d.ts.map +1 -1
- package/dist/lib/state.js +7 -5
- package/dist/lib/state.js.map +1 -1
- package/dist/lib/types.d.ts +1 -1
- package/dist/lib/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/commands/cron.d.ts +0 -3
- package/dist/commands/cron.d.ts.map +0 -1
- package/dist/commands/cron.js.map +0 -1
- package/dist/commands/jobs.d.ts +0 -3
- package/dist/commands/jobs.d.ts.map +0 -1
- package/dist/commands/jobs.js +0 -197
- package/dist/commands/jobs.js.map +0 -1
- package/dist/commands/memory.d.ts +0 -3
- package/dist/commands/memory.d.ts.map +0 -1
- package/dist/commands/memory.js +0 -428
- package/dist/commands/memory.js.map +0 -1
- package/dist/commands/repo.d.ts +0 -16
- package/dist/commands/repo.d.ts.map +0 -1
- package/dist/commands/repo.js +0 -159
- package/dist/commands/repo.js.map +0 -1
- package/dist/lib/__tests__/permissions.test.d.ts +0 -2
- package/dist/lib/__tests__/permissions.test.d.ts.map +0 -1
- package/dist/lib/__tests__/permissions.test.js +0 -120
- package/dist/lib/__tests__/permissions.test.js.map +0 -1
- package/dist/lib/agents.test.d.ts +0 -2
- package/dist/lib/agents.test.d.ts.map +0 -1
- package/dist/lib/agents.test.js +0 -29
- package/dist/lib/agents.test.js.map +0 -1
- package/dist/lib/cron.d.ts.map +0 -1
- package/dist/lib/cron.js.map +0 -1
- package/dist/lib/instructions.d.ts +0 -44
- package/dist/lib/instructions.d.ts.map +0 -1
- package/dist/lib/instructions.js +0 -280
- package/dist/lib/instructions.js.map +0 -1
- package/dist/lib/jobs.d.ts +0 -53
- package/dist/lib/jobs.d.ts.map +0 -1
- package/dist/lib/jobs.js +0 -242
- package/dist/lib/jobs.js.map +0 -1
package/dist/lib/instructions.js
DELETED
|
@@ -1,280 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import * as os from 'os';
|
|
4
|
-
import { AGENTS, ALL_AGENT_IDS } from './agents.js';
|
|
5
|
-
import { getMemoryDir } from './state.js';
|
|
6
|
-
function normalizeContent(content) {
|
|
7
|
-
return content.replace(/\r\n/g, '\n').trim();
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Get the real HOME directory, seeing through shim HOME overlays.
|
|
11
|
-
* Shim HOME follows the pattern: ~/.agents/versions/{agent}/{version}/home
|
|
12
|
-
* The env var AGENTS_REAL_HOME is set by newer shims, but we also detect by path pattern.
|
|
13
|
-
*/
|
|
14
|
-
function getRealHome() {
|
|
15
|
-
const realHome = process.env.AGENTS_REAL_HOME;
|
|
16
|
-
if (realHome)
|
|
17
|
-
return realHome;
|
|
18
|
-
// Detect shim HOME by path pattern: {realHome}/.agents/versions/{agent}/{version}/home
|
|
19
|
-
const home = os.homedir();
|
|
20
|
-
const shimSuffix = /\/\.agents\/versions\/[^/]+\/[^/]+\/home$/;
|
|
21
|
-
if (shimSuffix.test(home)) {
|
|
22
|
-
return home.replace(shimSuffix, '');
|
|
23
|
-
}
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Get the user-scope config dir for an agent, checking both shim HOME and real HOME.
|
|
28
|
-
*/
|
|
29
|
-
function getUserConfigDir(agentId) {
|
|
30
|
-
const agent = AGENTS[agentId];
|
|
31
|
-
const shimPath = path.join(agent.configDir, agent.instructionsFile);
|
|
32
|
-
if (fs.existsSync(shimPath)) {
|
|
33
|
-
return agent.configDir;
|
|
34
|
-
}
|
|
35
|
-
// Check real HOME if we're inside a shim
|
|
36
|
-
const realHome = getRealHome();
|
|
37
|
-
if (realHome && realHome !== os.homedir()) {
|
|
38
|
-
const realConfigDir = path.join(realHome, `.${agentId}`);
|
|
39
|
-
const realPath = path.join(realConfigDir, agent.instructionsFile);
|
|
40
|
-
if (fs.existsSync(realPath)) {
|
|
41
|
-
return realConfigDir;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return agent.configDir;
|
|
45
|
-
}
|
|
46
|
-
export function getInstructionsPath(agentId, scope, cwd = process.cwd()) {
|
|
47
|
-
const agent = AGENTS[agentId];
|
|
48
|
-
if (scope === 'user') {
|
|
49
|
-
return path.join(getUserConfigDir(agentId), agent.instructionsFile);
|
|
50
|
-
}
|
|
51
|
-
// Check root-level first (where agents actually read from), then subdirectory
|
|
52
|
-
const rootPath = path.join(cwd, agent.instructionsFile);
|
|
53
|
-
if (fs.existsSync(rootPath)) {
|
|
54
|
-
return rootPath;
|
|
55
|
-
}
|
|
56
|
-
return path.join(cwd, `.${agentId}`, agent.instructionsFile);
|
|
57
|
-
}
|
|
58
|
-
export function instructionsExists(agentId, scope = 'user', cwd = process.cwd()) {
|
|
59
|
-
const instructionsPath = getInstructionsPath(agentId, scope, cwd);
|
|
60
|
-
return fs.existsSync(instructionsPath);
|
|
61
|
-
}
|
|
62
|
-
export function discoverInstructionsFromRepo(repoPath) {
|
|
63
|
-
const instructions = [];
|
|
64
|
-
const memoryDir = path.join(repoPath, 'memory');
|
|
65
|
-
if (!fs.existsSync(memoryDir)) {
|
|
66
|
-
return instructions;
|
|
67
|
-
}
|
|
68
|
-
for (const agentId of ALL_AGENT_IDS) {
|
|
69
|
-
const agent = AGENTS[agentId];
|
|
70
|
-
// AGENTS.md is the canonical central memory file - don't claim it per-agent.
|
|
71
|
-
// It gets installed centrally to ~/.agents/memory/ and shims symlink it per-agent.
|
|
72
|
-
const possibleNames = [
|
|
73
|
-
`${agentId}.md`,
|
|
74
|
-
agent.instructionsFile,
|
|
75
|
-
].filter(name => name !== 'AGENTS.md');
|
|
76
|
-
for (const filename of possibleNames) {
|
|
77
|
-
const sourcePath = path.join(memoryDir, filename);
|
|
78
|
-
if (fs.existsSync(sourcePath)) {
|
|
79
|
-
instructions.push({
|
|
80
|
-
agentId,
|
|
81
|
-
sourcePath,
|
|
82
|
-
filename,
|
|
83
|
-
});
|
|
84
|
-
break;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return instructions;
|
|
89
|
-
}
|
|
90
|
-
export function resolveInstructionsSource(repoPath, agentId) {
|
|
91
|
-
const agent = AGENTS[agentId];
|
|
92
|
-
const memoryDir = path.join(repoPath, 'memory');
|
|
93
|
-
if (!fs.existsSync(memoryDir)) {
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
const possibleNames = [
|
|
97
|
-
`${agentId}.md`,
|
|
98
|
-
agent.instructionsFile,
|
|
99
|
-
].filter(name => name !== 'AGENTS.md');
|
|
100
|
-
for (const filename of possibleNames) {
|
|
101
|
-
const sourcePath = path.join(memoryDir, filename);
|
|
102
|
-
if (fs.existsSync(sourcePath)) {
|
|
103
|
-
return sourcePath;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
return null;
|
|
107
|
-
}
|
|
108
|
-
export function discoverMemoryFilesFromRepo(repoPath) {
|
|
109
|
-
const memoryDir = path.join(repoPath, 'memory');
|
|
110
|
-
if (!fs.existsSync(memoryDir)) {
|
|
111
|
-
return [];
|
|
112
|
-
}
|
|
113
|
-
try {
|
|
114
|
-
return fs
|
|
115
|
-
.readdirSync(memoryDir, { withFileTypes: true })
|
|
116
|
-
.filter((entry) => entry.isFile() && entry.name.endsWith('.md'))
|
|
117
|
-
.map((entry) => entry.name);
|
|
118
|
-
}
|
|
119
|
-
catch {
|
|
120
|
-
return [];
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
export function installInstructions(sourcePath, agentId, method = 'copy') {
|
|
124
|
-
const agent = AGENTS[agentId];
|
|
125
|
-
const targetPath = path.join(agent.configDir, agent.instructionsFile);
|
|
126
|
-
if (!fs.existsSync(agent.configDir)) {
|
|
127
|
-
fs.mkdirSync(agent.configDir, { recursive: true });
|
|
128
|
-
}
|
|
129
|
-
if (fs.existsSync(targetPath)) {
|
|
130
|
-
const stat = fs.lstatSync(targetPath);
|
|
131
|
-
if (stat.isSymbolicLink()) {
|
|
132
|
-
fs.unlinkSync(targetPath);
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
fs.unlinkSync(targetPath);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
try {
|
|
139
|
-
if (method === 'symlink') {
|
|
140
|
-
fs.symlinkSync(sourcePath, targetPath);
|
|
141
|
-
return { path: targetPath, method: 'symlink' };
|
|
142
|
-
}
|
|
143
|
-
fs.copyFileSync(sourcePath, targetPath);
|
|
144
|
-
return { path: targetPath, method: 'copy' };
|
|
145
|
-
}
|
|
146
|
-
catch (err) {
|
|
147
|
-
return { path: '', method: 'copy', error: err.message };
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
export function uninstallInstructions(agentId) {
|
|
151
|
-
const agent = AGENTS[agentId];
|
|
152
|
-
const targetPath = path.join(agent.configDir, agent.instructionsFile);
|
|
153
|
-
if (fs.existsSync(targetPath)) {
|
|
154
|
-
fs.unlinkSync(targetPath);
|
|
155
|
-
return true;
|
|
156
|
-
}
|
|
157
|
-
return false;
|
|
158
|
-
}
|
|
159
|
-
export function instructionsContentMatches(agentId, sourcePath, scope = 'user', cwd = process.cwd()) {
|
|
160
|
-
const installedPath = getInstructionsPath(agentId, scope, cwd);
|
|
161
|
-
if (!fs.existsSync(installedPath) || !fs.existsSync(sourcePath)) {
|
|
162
|
-
return false;
|
|
163
|
-
}
|
|
164
|
-
try {
|
|
165
|
-
const installedContent = fs.readFileSync(installedPath, 'utf-8');
|
|
166
|
-
const sourceContent = fs.readFileSync(sourcePath, 'utf-8');
|
|
167
|
-
return normalizeContent(installedContent) === normalizeContent(sourceContent);
|
|
168
|
-
}
|
|
169
|
-
catch {
|
|
170
|
-
return false;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
export function listInstalledInstructionsWithScope(agentId, cwd = process.cwd()) {
|
|
174
|
-
const results = [];
|
|
175
|
-
const agent = AGENTS[agentId];
|
|
176
|
-
const userConfigDir = getUserConfigDir(agentId);
|
|
177
|
-
const userPath = path.join(userConfigDir, agent.instructionsFile);
|
|
178
|
-
results.push({
|
|
179
|
-
agentId,
|
|
180
|
-
scope: 'user',
|
|
181
|
-
path: userPath,
|
|
182
|
-
exists: fs.existsSync(userPath),
|
|
183
|
-
});
|
|
184
|
-
// Check root-level first (where agents actually read from), then subdirectory
|
|
185
|
-
const rootPath = path.join(cwd, agent.instructionsFile);
|
|
186
|
-
const subPath = path.join(cwd, `.${agentId}`, agent.instructionsFile);
|
|
187
|
-
const projectPath = fs.existsSync(rootPath) ? rootPath : subPath;
|
|
188
|
-
results.push({
|
|
189
|
-
agentId,
|
|
190
|
-
scope: 'project',
|
|
191
|
-
path: projectPath,
|
|
192
|
-
exists: fs.existsSync(projectPath),
|
|
193
|
-
});
|
|
194
|
-
return results;
|
|
195
|
-
}
|
|
196
|
-
export function promoteInstructionsToUser(agentId, cwd = process.cwd()) {
|
|
197
|
-
const agent = AGENTS[agentId];
|
|
198
|
-
// Check root-level first, then subdirectory
|
|
199
|
-
const rootPath = path.join(cwd, agent.instructionsFile);
|
|
200
|
-
const subPath = path.join(cwd, `.${agentId}`, agent.instructionsFile);
|
|
201
|
-
const projectPath = fs.existsSync(rootPath) ? rootPath : subPath;
|
|
202
|
-
if (!fs.existsSync(projectPath)) {
|
|
203
|
-
return { success: false, error: `Project instructions not found at ${projectPath}` };
|
|
204
|
-
}
|
|
205
|
-
if (!fs.existsSync(agent.configDir)) {
|
|
206
|
-
fs.mkdirSync(agent.configDir, { recursive: true });
|
|
207
|
-
}
|
|
208
|
-
const targetPath = path.join(agent.configDir, agent.instructionsFile);
|
|
209
|
-
try {
|
|
210
|
-
fs.copyFileSync(projectPath, targetPath);
|
|
211
|
-
return { success: true };
|
|
212
|
-
}
|
|
213
|
-
catch (err) {
|
|
214
|
-
return { success: false, error: err.message };
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
export function getInstructionsContent(agentId, scope = 'user', cwd = process.cwd()) {
|
|
218
|
-
const instructionsPath = getInstructionsPath(agentId, scope, cwd);
|
|
219
|
-
if (!fs.existsSync(instructionsPath)) {
|
|
220
|
-
return null;
|
|
221
|
-
}
|
|
222
|
-
try {
|
|
223
|
-
return fs.readFileSync(instructionsPath, 'utf-8');
|
|
224
|
-
}
|
|
225
|
-
catch {
|
|
226
|
-
return null;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* Install memory files from repo memory/ to central ~/.agents/memory/ directory.
|
|
231
|
-
* Shims will symlink these to per-agent directories for synced agents.
|
|
232
|
-
*/
|
|
233
|
-
export function installInstructionsCentrally(repoPath, filesToInstall) {
|
|
234
|
-
const installed = [];
|
|
235
|
-
const errors = [];
|
|
236
|
-
const centralDir = getMemoryDir();
|
|
237
|
-
if (!fs.existsSync(centralDir)) {
|
|
238
|
-
fs.mkdirSync(centralDir, { recursive: true });
|
|
239
|
-
}
|
|
240
|
-
const memoryDir = path.join(repoPath, 'memory');
|
|
241
|
-
if (!fs.existsSync(memoryDir)) {
|
|
242
|
-
return { installed, errors };
|
|
243
|
-
}
|
|
244
|
-
try {
|
|
245
|
-
const files = filesToInstall ?? fs.readdirSync(memoryDir);
|
|
246
|
-
for (const file of files) {
|
|
247
|
-
if (!file.endsWith('.md'))
|
|
248
|
-
continue;
|
|
249
|
-
const sourcePath = path.join(memoryDir, file);
|
|
250
|
-
const stat = fs.statSync(sourcePath);
|
|
251
|
-
if (!stat.isFile())
|
|
252
|
-
continue;
|
|
253
|
-
const targetPath = path.join(centralDir, file);
|
|
254
|
-
try {
|
|
255
|
-
fs.copyFileSync(sourcePath, targetPath);
|
|
256
|
-
installed.push(file);
|
|
257
|
-
}
|
|
258
|
-
catch (err) {
|
|
259
|
-
errors.push(`${file}: ${err.message}`);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
catch (err) {
|
|
264
|
-
errors.push(`Failed to read memory directory: ${err.message}`);
|
|
265
|
-
}
|
|
266
|
-
return { installed, errors };
|
|
267
|
-
}
|
|
268
|
-
/**
|
|
269
|
-
* List memory files from central ~/.agents/memory/ directory.
|
|
270
|
-
*/
|
|
271
|
-
export function listCentralMemory() {
|
|
272
|
-
const centralDir = getMemoryDir();
|
|
273
|
-
if (!fs.existsSync(centralDir)) {
|
|
274
|
-
return [];
|
|
275
|
-
}
|
|
276
|
-
return fs
|
|
277
|
-
.readdirSync(centralDir)
|
|
278
|
-
.filter((f) => f.endsWith('.md'));
|
|
279
|
-
}
|
|
280
|
-
//# sourceMappingURL=instructions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/lib/instructions.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/jobs.d.ts
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
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
|
package/dist/lib/jobs.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/lib/jobs.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/jobs.js
DELETED
|
@@ -1,242 +0,0 @@
|
|
|
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
|
package/dist/lib/jobs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/lib/jobs.ts"],"names":[],"mappings":"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"}
|