@swarmify/agents-cli 1.9.1 → 1.10.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.
Files changed (52) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +8 -0
  3. package/dist/commands/cron.d.ts +3 -0
  4. package/dist/commands/cron.d.ts.map +1 -0
  5. package/dist/commands/cron.js +457 -0
  6. package/dist/commands/cron.js.map +1 -0
  7. package/dist/commands/daemon.d.ts.map +1 -1
  8. package/dist/commands/daemon.js +215 -1
  9. package/dist/commands/daemon.js.map +1 -1
  10. package/dist/commands/drive.d.ts +3 -0
  11. package/dist/commands/drive.d.ts.map +1 -0
  12. package/dist/commands/drive.js +112 -0
  13. package/dist/commands/drive.js.map +1 -0
  14. package/dist/commands/sessions.d.ts.map +1 -1
  15. package/dist/commands/sessions.js +1 -0
  16. package/dist/commands/sessions.js.map +1 -1
  17. package/dist/commands/view.d.ts.map +1 -1
  18. package/dist/commands/view.js +62 -30
  19. package/dist/commands/view.js.map +1 -1
  20. package/dist/index.js +38 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/lib/agents.d.ts +10 -0
  23. package/dist/lib/agents.d.ts.map +1 -1
  24. package/dist/lib/agents.js +35 -6
  25. package/dist/lib/agents.js.map +1 -1
  26. package/dist/lib/cron.d.ts +70 -0
  27. package/dist/lib/cron.d.ts.map +1 -0
  28. package/dist/lib/cron.js +325 -0
  29. package/dist/lib/cron.js.map +1 -0
  30. package/dist/lib/drive-sync.d.ts +28 -0
  31. package/dist/lib/drive-sync.d.ts.map +1 -0
  32. package/dist/lib/drive-sync.js +193 -0
  33. package/dist/lib/drive-sync.js.map +1 -0
  34. package/dist/lib/factory.d.ts +57 -0
  35. package/dist/lib/factory.d.ts.map +1 -0
  36. package/dist/lib/factory.js +110 -0
  37. package/dist/lib/factory.js.map +1 -0
  38. package/dist/lib/session/discover.d.ts.map +1 -1
  39. package/dist/lib/session/discover.js +134 -2
  40. package/dist/lib/session/discover.js.map +1 -1
  41. package/dist/lib/session/parse.d.ts.map +1 -1
  42. package/dist/lib/session/parse.js +1 -0
  43. package/dist/lib/session/parse.js.map +1 -1
  44. package/dist/lib/session/types.d.ts +1 -1
  45. package/dist/lib/session/types.d.ts.map +1 -1
  46. package/dist/lib/session/types.js +1 -1
  47. package/dist/lib/session/types.js.map +1 -1
  48. package/dist/lib/state.d.ts +1 -0
  49. package/dist/lib/state.d.ts.map +1 -1
  50. package/dist/lib/state.js +7 -0
  51. package/dist/lib/state.js.map +1 -1
  52. package/package.json +1 -1
@@ -0,0 +1,325 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import * as yaml from 'yaml';
4
+ import { Cron } from 'croner';
5
+ import { getCronDir, getRunsDir, ensureAgentsDir } from './state.js';
6
+ import { ALL_AGENT_IDS } from './agents.js';
7
+ const JOB_DEFAULTS = {
8
+ mode: 'plan',
9
+ effort: 'default',
10
+ timeout: '30m',
11
+ enabled: true,
12
+ };
13
+ export function listJobs() {
14
+ ensureAgentsDir();
15
+ const jobsDir = getCronDir();
16
+ if (!fs.existsSync(jobsDir))
17
+ return [];
18
+ const files = fs.readdirSync(jobsDir).filter((f) => f.endsWith('.yml') || f.endsWith('.yaml'));
19
+ const jobs = [];
20
+ for (const file of files) {
21
+ const job = readJobFile(path.join(jobsDir, file));
22
+ if (job)
23
+ jobs.push(job);
24
+ }
25
+ return jobs;
26
+ }
27
+ export function readJob(name) {
28
+ ensureAgentsDir();
29
+ const jobsDir = getCronDir();
30
+ for (const ext of ['.yml', '.yaml']) {
31
+ const filePath = path.join(jobsDir, name + ext);
32
+ if (fs.existsSync(filePath)) {
33
+ return readJobFile(filePath);
34
+ }
35
+ }
36
+ return null;
37
+ }
38
+ function readJobFile(filePath) {
39
+ try {
40
+ const content = fs.readFileSync(filePath, 'utf-8');
41
+ const parsed = yaml.parse(content);
42
+ if (!parsed || typeof parsed !== 'object')
43
+ return null;
44
+ return {
45
+ ...JOB_DEFAULTS,
46
+ ...parsed,
47
+ name: parsed.name || path.basename(filePath).replace(/\.ya?ml$/, ''),
48
+ };
49
+ }
50
+ catch {
51
+ return null;
52
+ }
53
+ }
54
+ export function writeJob(config) {
55
+ ensureAgentsDir();
56
+ const jobsDir = getCronDir();
57
+ const filePath = path.join(jobsDir, config.name + '.yml');
58
+ const output = { ...config };
59
+ if (output.mode === 'plan')
60
+ delete output.mode;
61
+ if (output.effort === 'default')
62
+ delete output.effort;
63
+ if (output.timeout === '30m')
64
+ delete output.timeout;
65
+ if (output.enabled === true)
66
+ delete output.enabled;
67
+ if (output.runOnce === false || output.runOnce === undefined)
68
+ delete output.runOnce;
69
+ fs.writeFileSync(filePath, yaml.stringify(output), 'utf-8');
70
+ }
71
+ export function deleteJob(name) {
72
+ const jobsDir = getCronDir();
73
+ for (const ext of ['.yml', '.yaml']) {
74
+ const filePath = path.join(jobsDir, name + ext);
75
+ if (fs.existsSync(filePath)) {
76
+ fs.unlinkSync(filePath);
77
+ return true;
78
+ }
79
+ }
80
+ return false;
81
+ }
82
+ export function setJobEnabled(name, enabled) {
83
+ const job = readJob(name);
84
+ if (!job)
85
+ throw new Error(`Job '${name}' not found`);
86
+ job.enabled = enabled;
87
+ writeJob(job);
88
+ }
89
+ export function validateJob(config) {
90
+ const errors = [];
91
+ if (!config.name || typeof config.name !== 'string') {
92
+ errors.push('name is required');
93
+ }
94
+ if (!config.schedule || typeof config.schedule !== 'string') {
95
+ errors.push('schedule (cron expression) is required');
96
+ }
97
+ else {
98
+ // Validate cron expression is parseable
99
+ try {
100
+ new Cron(config.schedule);
101
+ }
102
+ catch {
103
+ errors.push(`invalid cron expression: "${config.schedule}"`);
104
+ }
105
+ }
106
+ if (!config.agent || typeof config.agent !== 'string') {
107
+ errors.push('agent is required');
108
+ }
109
+ if (config.agent && !ALL_AGENT_IDS.includes(config.agent)) {
110
+ errors.push(`agent must be one of: ${ALL_AGENT_IDS.join(', ')}`);
111
+ }
112
+ if (config.mode && !['plan', 'edit', 'full'].includes(config.mode)) {
113
+ errors.push('mode must be plan, edit, or full');
114
+ }
115
+ if (config.effort && !['fast', 'default', 'detailed'].includes(config.effort)) {
116
+ errors.push('effort must be fast, default, or detailed');
117
+ }
118
+ if (!config.prompt || typeof config.prompt !== 'string') {
119
+ errors.push('prompt is required');
120
+ }
121
+ if (config.timeout && !parseTimeout(config.timeout)) {
122
+ errors.push('timeout must be like 30m, 2h, 1h30m');
123
+ }
124
+ return errors;
125
+ }
126
+ export function resolveJobPrompt(config) {
127
+ const now = new Date();
128
+ const tz = config.timezone || Intl.DateTimeFormat().resolvedOptions().timeZone;
129
+ const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
130
+ // Compute date/day/time in the job's configured timezone
131
+ // Use Intl.DateTimeFormat to get the weekday name directly in the target timezone
132
+ const localDayName = new Intl.DateTimeFormat('en-US', { timeZone: tz, weekday: 'long' }).format(now);
133
+ const localDay = days.includes(localDayName) ? localDayName : days[now.getDay()];
134
+ const localDate = now.toLocaleDateString('en-CA', { timeZone: tz }); // en-CA gives YYYY-MM-DD
135
+ const localTime = now.toLocaleTimeString('en-GB', { timeZone: tz, hour12: false }); // HH:MM:SS
136
+ let prompt = config.prompt;
137
+ // Built-in variables (timezone-aware)
138
+ prompt = prompt.replace(/\{day\}/g, localDay);
139
+ prompt = prompt.replace(/\{date\}/g, localDate);
140
+ prompt = prompt.replace(/\{time\}/g, localTime);
141
+ prompt = prompt.replace(/\{job_name\}/g, config.name);
142
+ // User-defined variables
143
+ if (config.variables) {
144
+ for (const [key, value] of Object.entries(config.variables)) {
145
+ prompt = prompt.replace(new RegExp(`\\{${key}\\}`, 'g'), value);
146
+ }
147
+ }
148
+ // Last report (special handling)
149
+ const latestRun = getLatestRun(config.name);
150
+ if (latestRun) {
151
+ const reportPath = path.join(getRunsDir(), config.name, latestRun.runId, 'report.md');
152
+ if (fs.existsSync(reportPath)) {
153
+ const report = fs.readFileSync(reportPath, 'utf-8');
154
+ prompt = prompt.replace(/\{last_report\}/g, report);
155
+ }
156
+ else {
157
+ prompt = prompt.replace(/\{last_report\}/g, '(no previous report)');
158
+ }
159
+ }
160
+ else {
161
+ prompt = prompt.replace(/\{last_report\}/g, '(no previous report)');
162
+ }
163
+ return prompt;
164
+ }
165
+ export function parseTimeout(timeout) {
166
+ const match = timeout.match(/^(?:(\d+)h)?(?:(\d+)m)?$/);
167
+ if (!match)
168
+ return null;
169
+ const hours = parseInt(match[1] || '0', 10);
170
+ const minutes = parseInt(match[2] || '0', 10);
171
+ const ms = (hours * 60 + minutes) * 60 * 1000;
172
+ return ms > 0 ? ms : null;
173
+ }
174
+ export function listRuns(jobName) {
175
+ const runsDir = getRunsDir();
176
+ const jobRunsDir = path.join(runsDir, jobName);
177
+ if (!fs.existsSync(jobRunsDir))
178
+ return [];
179
+ const entries = fs.readdirSync(jobRunsDir, { withFileTypes: true })
180
+ .filter((e) => e.isDirectory())
181
+ .map((e) => e.name)
182
+ .sort();
183
+ const runs = [];
184
+ for (const runId of entries) {
185
+ const meta = readRunMeta(jobName, runId);
186
+ if (meta)
187
+ runs.push(meta);
188
+ }
189
+ return runs;
190
+ }
191
+ export function getLatestRun(jobName) {
192
+ const runs = listRuns(jobName);
193
+ return runs.length > 0 ? runs[runs.length - 1] : null;
194
+ }
195
+ export function writeRunMeta(meta) {
196
+ ensureAgentsDir();
197
+ const runDir = path.join(getRunsDir(), meta.jobName, meta.runId);
198
+ fs.mkdirSync(runDir, { recursive: true });
199
+ fs.writeFileSync(path.join(runDir, 'meta.json'), JSON.stringify(meta, null, 2), 'utf-8');
200
+ }
201
+ export function readRunMeta(jobName, runId) {
202
+ const metaPath = path.join(getRunsDir(), jobName, runId, 'meta.json');
203
+ if (!fs.existsSync(metaPath))
204
+ return null;
205
+ try {
206
+ return JSON.parse(fs.readFileSync(metaPath, 'utf-8'));
207
+ }
208
+ catch {
209
+ return null;
210
+ }
211
+ }
212
+ export function getRunDir(jobName, runId) {
213
+ return path.join(getRunsDir(), jobName, runId);
214
+ }
215
+ export function discoverJobsFromRepo(repoPath) {
216
+ const jobsPath = path.join(repoPath, 'cron');
217
+ if (!fs.existsSync(jobsPath))
218
+ return [];
219
+ return fs.readdirSync(jobsPath)
220
+ .filter((f) => f.endsWith('.yml') || f.endsWith('.yaml'))
221
+ .map((f) => ({
222
+ name: f.replace(/\.ya?ml$/, ''),
223
+ path: path.join(jobsPath, f),
224
+ }));
225
+ }
226
+ export function jobExists(name) {
227
+ return readJob(name) !== null;
228
+ }
229
+ export function getJobPath(name) {
230
+ const jobsDir = getCronDir();
231
+ for (const ext of ['.yml', '.yaml']) {
232
+ const filePath = path.join(jobsDir, name + ext);
233
+ if (fs.existsSync(filePath)) {
234
+ return filePath;
235
+ }
236
+ }
237
+ return null;
238
+ }
239
+ /**
240
+ * Parse an "at" time string into a one-shot cron expression.
241
+ * Supports formats like:
242
+ * - "9:00" or "09:00" - today at 9:00 AM (or tomorrow if past)
243
+ * - "14:30" - today at 2:30 PM
244
+ * - "2026-02-24 09:00" - specific date and time
245
+ * Returns null if invalid format.
246
+ */
247
+ export function parseAtTime(atTime) {
248
+ // Try parsing as "HH:MM" format
249
+ const timeMatch = atTime.match(/^(\d{1,2}):(\d{2})$/);
250
+ if (timeMatch) {
251
+ const hour = parseInt(timeMatch[1], 10);
252
+ const minute = parseInt(timeMatch[2], 10);
253
+ if (hour < 0 || hour > 23 || minute < 0 || minute > 59)
254
+ return null;
255
+ const now = new Date();
256
+ let targetDate = new Date();
257
+ targetDate.setHours(hour, minute, 0, 0);
258
+ // If the time has already passed today, schedule for tomorrow
259
+ if (targetDate <= now) {
260
+ targetDate.setDate(targetDate.getDate() + 1);
261
+ }
262
+ const day = targetDate.getDate();
263
+ const month = targetDate.getMonth() + 1;
264
+ // Cron format: minute hour day month *
265
+ return { schedule: `${minute} ${hour} ${day} ${month} *`, runOnce: true };
266
+ }
267
+ // Try parsing as "YYYY-MM-DD HH:MM" format
268
+ const dateTimeMatch = atTime.match(/^(\d{4})-(\d{2})-(\d{2})\s+(\d{1,2}):(\d{2})$/);
269
+ if (dateTimeMatch) {
270
+ const year = parseInt(dateTimeMatch[1], 10);
271
+ const month = parseInt(dateTimeMatch[2], 10);
272
+ const day = parseInt(dateTimeMatch[3], 10);
273
+ const hour = parseInt(dateTimeMatch[4], 10);
274
+ const minute = parseInt(dateTimeMatch[5], 10);
275
+ if (month < 1 || month > 12 || day < 1 || day > 31)
276
+ return null;
277
+ if (hour < 0 || hour > 23 || minute < 0 || minute > 59)
278
+ return null;
279
+ // Note: croner doesn't support year, so we just use month/day
280
+ // The job will fire on that date each year unless removed
281
+ return { schedule: `${minute} ${hour} ${day} ${month} *`, runOnce: true };
282
+ }
283
+ return null;
284
+ }
285
+ export function jobContentMatches(name, sourcePath) {
286
+ const existing = readJob(name);
287
+ if (!existing)
288
+ return false;
289
+ try {
290
+ const sourceContent = fs.readFileSync(sourcePath, 'utf-8');
291
+ const sourceJob = yaml.parse(sourceContent);
292
+ if (!sourceJob)
293
+ return false;
294
+ const existingNormalized = yaml.stringify(existing);
295
+ const fullSource = { ...JOB_DEFAULTS, ...sourceJob, name: sourceJob.name || name };
296
+ const sourceNormalized = yaml.stringify(fullSource);
297
+ return existingNormalized === sourceNormalized;
298
+ }
299
+ catch {
300
+ return false;
301
+ }
302
+ }
303
+ export function installJobFromSource(sourcePath, name) {
304
+ try {
305
+ const content = fs.readFileSync(sourcePath, 'utf-8');
306
+ const parsed = yaml.parse(content);
307
+ if (!parsed)
308
+ return { success: false, error: 'Invalid YAML' };
309
+ const config = {
310
+ ...JOB_DEFAULTS,
311
+ ...parsed,
312
+ name: parsed.name || name,
313
+ };
314
+ const errors = validateJob(config);
315
+ if (errors.length > 0) {
316
+ return { success: false, error: errors.join(', ') };
317
+ }
318
+ writeJob(config);
319
+ return { success: true };
320
+ }
321
+ catch (err) {
322
+ return { success: false, error: err.message };
323
+ }
324
+ }
325
+ //# sourceMappingURL=cron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.js","sourceRoot":"","sources":["../../src/lib/cron.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface DriveConfig {
2
+ remote: string | null;
3
+ attached: boolean;
4
+ previousTargets: {
5
+ configDir: string;
6
+ homeFiles: Record<string, string>;
7
+ } | null;
8
+ lastPull: string | null;
9
+ lastPush: string | null;
10
+ }
11
+ export declare function readDriveConfig(): DriveConfig;
12
+ export declare function writeDriveConfig(config: DriveConfig): void;
13
+ export declare function setRemote(target: string): void;
14
+ export declare function pull(): Promise<void>;
15
+ export declare function push(): Promise<void>;
16
+ export declare function attach(): void;
17
+ export declare function detach(): void;
18
+ export interface DriveStatus {
19
+ remote: string | null;
20
+ attached: boolean;
21
+ lastPull: string | null;
22
+ lastPush: string | null;
23
+ driveDir: string;
24
+ configDirTarget: string | null;
25
+ homeFileTargets: Record<string, string | null>;
26
+ }
27
+ export declare function getDriveStatus(): DriveStatus;
28
+ //# sourceMappingURL=drive-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drive-sync.d.ts","sourceRoot":"","sources":["../../src/lib/drive-sync.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACnC,GAAG,IAAI,CAAC;IACT,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAMD,wBAAgB,eAAe,IAAI,WAAW,CAU7C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAM1D;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAO9C;AAED,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAW1C;AAED,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAa1C;AAED,wBAAgB,MAAM,IAAI,IAAI,CAmE7B;AAED,wBAAgB,MAAM,IAAI,IAAI,CA0B7B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;CAChD;AAED,wBAAgB,cAAc,IAAI,WAAW,CAsC5C"}
@@ -0,0 +1,193 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import * as os from 'os';
4
+ import { exec } from 'child_process';
5
+ import { promisify } from 'util';
6
+ import { getDriveDir } from './state.js';
7
+ import { AGENTS } from './agents.js';
8
+ const execAsync = promisify(exec);
9
+ const AGENT = 'claude';
10
+ function configPath() {
11
+ return path.join(getDriveDir(), 'config.json');
12
+ }
13
+ export function readDriveConfig() {
14
+ const p = configPath();
15
+ if (fs.existsSync(p)) {
16
+ try {
17
+ return JSON.parse(fs.readFileSync(p, 'utf-8'));
18
+ }
19
+ catch {
20
+ // Fall through to default
21
+ }
22
+ }
23
+ return { remote: null, attached: false, previousTargets: null, lastPull: null, lastPush: null };
24
+ }
25
+ export function writeDriveConfig(config) {
26
+ const dir = getDriveDir();
27
+ if (!fs.existsSync(dir)) {
28
+ fs.mkdirSync(dir, { recursive: true });
29
+ }
30
+ fs.writeFileSync(configPath(), JSON.stringify(config, null, 2));
31
+ }
32
+ export function setRemote(target) {
33
+ if (!target.match(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+$/)) {
34
+ throw new Error(`Invalid remote: ${target}. Expected: user@host`);
35
+ }
36
+ const config = readDriveConfig();
37
+ config.remote = target;
38
+ writeDriveConfig(config);
39
+ }
40
+ export async function pull() {
41
+ const config = readDriveConfig();
42
+ if (!config.remote)
43
+ throw new Error('No remote configured. Run: agents drive remote <user@host>');
44
+ const localDir = getDriveDir() + '/';
45
+ const remote = `${config.remote}:~/.agents/drive/`;
46
+ await execAsync(`rsync -az --exclude='config.json' ${remote} ${localDir}`);
47
+ config.lastPull = new Date().toISOString();
48
+ writeDriveConfig(config);
49
+ }
50
+ export async function push() {
51
+ const config = readDriveConfig();
52
+ if (!config.remote)
53
+ throw new Error('No remote configured. Run: agents drive remote <user@host>');
54
+ const localDir = getDriveDir() + '/';
55
+ const remote = `${config.remote}:~/.agents/drive/`;
56
+ // Ensure remote directory exists
57
+ await execAsync(`ssh ${config.remote} 'mkdir -p ~/.agents/drive'`);
58
+ await execAsync(`rsync -az --exclude='config.json' ${localDir} ${remote}`);
59
+ config.lastPush = new Date().toISOString();
60
+ writeDriveConfig(config);
61
+ }
62
+ export function attach() {
63
+ const config = readDriveConfig();
64
+ if (config.attached)
65
+ throw new Error('Drive is already attached');
66
+ const home = os.homedir();
67
+ const agentConfig = AGENTS[AGENT];
68
+ const driveDir = getDriveDir();
69
+ const configDirPath = agentConfig.configDir; // ~/.claude
70
+ const driveConfigDir = path.join(driveDir, `.${AGENT}`); // ~/.agents/drive/.claude
71
+ // Read current symlink target
72
+ let prevConfigDir = null;
73
+ try {
74
+ const stat = fs.lstatSync(configDirPath);
75
+ if (stat.isSymbolicLink()) {
76
+ prevConfigDir = fs.readlinkSync(configDirPath);
77
+ }
78
+ }
79
+ catch {
80
+ // Path doesn't exist
81
+ }
82
+ if (!prevConfigDir) {
83
+ throw new Error(`${configDirPath} is not a symlink. Run 'agents use claude' first.`);
84
+ }
85
+ // Save previous targets for home files
86
+ const prevHomeFiles = {};
87
+ for (const hf of agentConfig.homeFiles || []) {
88
+ const hfPath = path.join(home, hf);
89
+ try {
90
+ const stat = fs.lstatSync(hfPath);
91
+ if (stat.isSymbolicLink()) {
92
+ prevHomeFiles[hf] = fs.readlinkSync(hfPath);
93
+ }
94
+ }
95
+ catch {
96
+ // File doesn't exist
97
+ }
98
+ }
99
+ config.previousTargets = {
100
+ configDir: prevConfigDir,
101
+ homeFiles: prevHomeFiles,
102
+ };
103
+ // Ensure drive config dir exists
104
+ if (!fs.existsSync(driveConfigDir)) {
105
+ fs.mkdirSync(driveConfigDir, { recursive: true });
106
+ }
107
+ // Swap config dir symlink
108
+ fs.unlinkSync(configDirPath);
109
+ fs.symlinkSync(driveConfigDir, configDirPath);
110
+ // Swap home files
111
+ for (const hf of agentConfig.homeFiles || []) {
112
+ const hfPath = path.join(home, hf);
113
+ const driveHfPath = path.join(driveDir, hf);
114
+ if (!fs.existsSync(driveHfPath)) {
115
+ fs.writeFileSync(driveHfPath, '{}');
116
+ }
117
+ try {
118
+ fs.unlinkSync(hfPath);
119
+ }
120
+ catch { /* doesn't exist */ }
121
+ fs.symlinkSync(driveHfPath, hfPath);
122
+ }
123
+ config.attached = true;
124
+ writeDriveConfig(config);
125
+ }
126
+ export function detach() {
127
+ const config = readDriveConfig();
128
+ if (!config.attached)
129
+ throw new Error('Drive is not attached');
130
+ if (!config.previousTargets)
131
+ throw new Error('No previous targets saved');
132
+ const home = os.homedir();
133
+ const agentConfig = AGENTS[AGENT];
134
+ // Restore config dir symlink
135
+ const configDirPath = agentConfig.configDir;
136
+ fs.unlinkSync(configDirPath);
137
+ fs.symlinkSync(config.previousTargets.configDir, configDirPath);
138
+ // Restore home files
139
+ for (const hf of agentConfig.homeFiles || []) {
140
+ const hfPath = path.join(home, hf);
141
+ const prevTarget = config.previousTargets.homeFiles[hf];
142
+ if (prevTarget) {
143
+ try {
144
+ fs.unlinkSync(hfPath);
145
+ }
146
+ catch { /* doesn't exist */ }
147
+ fs.symlinkSync(prevTarget, hfPath);
148
+ }
149
+ }
150
+ config.attached = false;
151
+ config.previousTargets = null;
152
+ writeDriveConfig(config);
153
+ }
154
+ export function getDriveStatus() {
155
+ const config = readDriveConfig();
156
+ const home = os.homedir();
157
+ const agentConfig = AGENTS[AGENT];
158
+ let configDirTarget = null;
159
+ try {
160
+ const stat = fs.lstatSync(agentConfig.configDir);
161
+ if (stat.isSymbolicLink()) {
162
+ configDirTarget = fs.readlinkSync(agentConfig.configDir);
163
+ }
164
+ }
165
+ catch {
166
+ // Not a symlink or doesn't exist
167
+ }
168
+ const homeFileTargets = {};
169
+ for (const hf of agentConfig.homeFiles || []) {
170
+ try {
171
+ const stat = fs.lstatSync(path.join(home, hf));
172
+ if (stat.isSymbolicLink()) {
173
+ homeFileTargets[hf] = fs.readlinkSync(path.join(home, hf));
174
+ }
175
+ else {
176
+ homeFileTargets[hf] = null;
177
+ }
178
+ }
179
+ catch {
180
+ homeFileTargets[hf] = null;
181
+ }
182
+ }
183
+ return {
184
+ remote: config.remote,
185
+ attached: config.attached,
186
+ lastPull: config.lastPull,
187
+ lastPush: config.lastPush,
188
+ driveDir: getDriveDir(),
189
+ configDirTarget,
190
+ homeFileTargets,
191
+ };
192
+ }
193
+ //# sourceMappingURL=drive-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drive-sync.js","sourceRoot":"","sources":["../../src/lib/drive-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ export interface DaemonConfig {
2
+ nodeId?: string;
3
+ nodeToken?: string;
4
+ endpoint?: string;
5
+ lastSync?: number;
6
+ }
7
+ export declare function loadDaemonConfig(): DaemonConfig;
8
+ export declare function saveDaemonConfig(config: DaemonConfig): void;
9
+ export interface SessionData {
10
+ id: string;
11
+ agent: string;
12
+ version?: string;
13
+ project?: string;
14
+ branch?: string;
15
+ prompt?: string;
16
+ workingDir?: string;
17
+ pid?: number;
18
+ startedAt?: number;
19
+ summary?: string;
20
+ }
21
+ export interface SyncRequest {
22
+ activeSessions: SessionData[];
23
+ completedSessions?: SessionData[];
24
+ machineStats?: {
25
+ cpuUsage?: number;
26
+ memoryUsage?: number;
27
+ agentVersions?: Record<string, string>;
28
+ };
29
+ }
30
+ export interface SyncResponse {
31
+ acknowledged: number;
32
+ commands?: Array<{
33
+ type: 'stop_session' | 'start_task';
34
+ sessionId?: string;
35
+ prompt?: string;
36
+ }>;
37
+ }
38
+ export interface RegisterResponse {
39
+ nodeId: string;
40
+ token: string;
41
+ message: string;
42
+ }
43
+ export declare class FactoryClient {
44
+ private endpoint;
45
+ private nodeToken;
46
+ private nodeId?;
47
+ constructor(endpoint: string, nodeToken: string, nodeId?: string);
48
+ register(): Promise<RegisterResponse>;
49
+ sync(nodeId: string, data: SyncRequest): Promise<SyncResponse>;
50
+ healthCheck(): Promise<boolean>;
51
+ }
52
+ export declare function getMachineStats(): {
53
+ cpuUsage?: number;
54
+ memoryUsage?: number;
55
+ };
56
+ export declare function getAgentVersions(): Promise<Record<string, string>>;
57
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/lib/factory.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD,wBAAgB,gBAAgB,IAAI,YAAY,CAU/C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAG3D;AAID,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,iBAAiB,CAAC,EAAE,WAAW,EAAE,CAAC;IAClC,YAAY,CAAC,EAAE;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACxC,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,cAAc,GAAG,YAAY,CAAC;QACpC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAM1D,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAuBrC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAkB9D,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAQtC;AAGD,wBAAgB,eAAe,IAAI;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAS7E;AAGD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAuBxE"}