agent-oven 0.1.0

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 (146) hide show
  1. package/CLAUDE.md +164 -0
  2. package/LICENSE +21 -0
  3. package/README.md +447 -0
  4. package/dist/cli/commands/add.d.ts +6 -0
  5. package/dist/cli/commands/add.d.ts.map +1 -0
  6. package/dist/cli/commands/add.js +150 -0
  7. package/dist/cli/commands/add.js.map +1 -0
  8. package/dist/cli/commands/daemon.d.ts +6 -0
  9. package/dist/cli/commands/daemon.d.ts.map +1 -0
  10. package/dist/cli/commands/daemon.js +97 -0
  11. package/dist/cli/commands/daemon.js.map +1 -0
  12. package/dist/cli/commands/delete.d.ts +6 -0
  13. package/dist/cli/commands/delete.d.ts.map +1 -0
  14. package/dist/cli/commands/delete.js +34 -0
  15. package/dist/cli/commands/delete.js.map +1 -0
  16. package/dist/cli/commands/down.d.ts +6 -0
  17. package/dist/cli/commands/down.d.ts.map +1 -0
  18. package/dist/cli/commands/down.js +53 -0
  19. package/dist/cli/commands/down.js.map +1 -0
  20. package/dist/cli/commands/list.d.ts +6 -0
  21. package/dist/cli/commands/list.d.ts.map +1 -0
  22. package/dist/cli/commands/list.js +41 -0
  23. package/dist/cli/commands/list.js.map +1 -0
  24. package/dist/cli/commands/logs.d.ts +6 -0
  25. package/dist/cli/commands/logs.d.ts.map +1 -0
  26. package/dist/cli/commands/logs.js +124 -0
  27. package/dist/cli/commands/logs.js.map +1 -0
  28. package/dist/cli/commands/run.d.ts +6 -0
  29. package/dist/cli/commands/run.d.ts.map +1 -0
  30. package/dist/cli/commands/run.js +45 -0
  31. package/dist/cli/commands/run.js.map +1 -0
  32. package/dist/cli/commands/scheduler-tick.d.ts +8 -0
  33. package/dist/cli/commands/scheduler-tick.d.ts.map +1 -0
  34. package/dist/cli/commands/scheduler-tick.js +25 -0
  35. package/dist/cli/commands/scheduler-tick.js.map +1 -0
  36. package/dist/cli/commands/show.d.ts +6 -0
  37. package/dist/cli/commands/show.d.ts.map +1 -0
  38. package/dist/cli/commands/show.js +81 -0
  39. package/dist/cli/commands/show.js.map +1 -0
  40. package/dist/cli/commands/status.d.ts +6 -0
  41. package/dist/cli/commands/status.d.ts.map +1 -0
  42. package/dist/cli/commands/status.js +63 -0
  43. package/dist/cli/commands/status.js.map +1 -0
  44. package/dist/cli/commands/toggle.d.ts +6 -0
  45. package/dist/cli/commands/toggle.d.ts.map +1 -0
  46. package/dist/cli/commands/toggle.js +24 -0
  47. package/dist/cli/commands/toggle.js.map +1 -0
  48. package/dist/cli/commands/up.d.ts +6 -0
  49. package/dist/cli/commands/up.d.ts.map +1 -0
  50. package/dist/cli/commands/up.js +48 -0
  51. package/dist/cli/commands/up.js.map +1 -0
  52. package/dist/cli/utils/errors.d.ts +17 -0
  53. package/dist/cli/utils/errors.d.ts.map +1 -0
  54. package/dist/cli/utils/errors.js +37 -0
  55. package/dist/cli/utils/errors.js.map +1 -0
  56. package/dist/cli/utils/output.d.ts +17 -0
  57. package/dist/cli/utils/output.d.ts.map +1 -0
  58. package/dist/cli/utils/output.js +52 -0
  59. package/dist/cli/utils/output.js.map +1 -0
  60. package/dist/cli/utils/prompts.d.ts +8 -0
  61. package/dist/cli/utils/prompts.d.ts.map +1 -0
  62. package/dist/cli/utils/prompts.js +27 -0
  63. package/dist/cli/utils/prompts.js.map +1 -0
  64. package/dist/cli.d.ts +8 -0
  65. package/dist/cli.d.ts.map +1 -0
  66. package/dist/cli.js +71 -0
  67. package/dist/cli.js.map +1 -0
  68. package/dist/core/auth.d.ts +40 -0
  69. package/dist/core/auth.d.ts.map +1 -0
  70. package/dist/core/auth.js +114 -0
  71. package/dist/core/auth.js.map +1 -0
  72. package/dist/core/config.d.ts +43 -0
  73. package/dist/core/config.d.ts.map +1 -0
  74. package/dist/core/config.js +179 -0
  75. package/dist/core/config.js.map +1 -0
  76. package/dist/core/docker.d.ts +60 -0
  77. package/dist/core/docker.d.ts.map +1 -0
  78. package/dist/core/docker.js +507 -0
  79. package/dist/core/docker.js.map +1 -0
  80. package/dist/core/index.d.ts +10 -0
  81. package/dist/core/index.d.ts.map +1 -0
  82. package/dist/core/index.js +10 -0
  83. package/dist/core/index.js.map +1 -0
  84. package/dist/core/jobs.d.ts +53 -0
  85. package/dist/core/jobs.d.ts.map +1 -0
  86. package/dist/core/jobs.js +264 -0
  87. package/dist/core/jobs.js.map +1 -0
  88. package/dist/core/scheduler-runner.d.ts +15 -0
  89. package/dist/core/scheduler-runner.d.ts.map +1 -0
  90. package/dist/core/scheduler-runner.js +230 -0
  91. package/dist/core/scheduler-runner.js.map +1 -0
  92. package/dist/core/scheduler.d.ts +41 -0
  93. package/dist/core/scheduler.d.ts.map +1 -0
  94. package/dist/core/scheduler.js +373 -0
  95. package/dist/core/scheduler.js.map +1 -0
  96. package/dist/core/setup.d.ts +84 -0
  97. package/dist/core/setup.d.ts.map +1 -0
  98. package/dist/core/setup.js +315 -0
  99. package/dist/core/setup.js.map +1 -0
  100. package/dist/core/types.d.ts +181 -0
  101. package/dist/core/types.d.ts.map +1 -0
  102. package/dist/core/types.js +12 -0
  103. package/dist/core/types.js.map +1 -0
  104. package/dist/tui/App.d.ts +7 -0
  105. package/dist/tui/App.d.ts.map +1 -0
  106. package/dist/tui/App.js +103 -0
  107. package/dist/tui/App.js.map +1 -0
  108. package/dist/tui/components/Dashboard.d.ts +9 -0
  109. package/dist/tui/components/Dashboard.d.ts.map +1 -0
  110. package/dist/tui/components/Dashboard.js +70 -0
  111. package/dist/tui/components/Dashboard.js.map +1 -0
  112. package/dist/tui/components/InitWizard.d.ts +2 -0
  113. package/dist/tui/components/InitWizard.d.ts.map +1 -0
  114. package/dist/tui/components/InitWizard.js +522 -0
  115. package/dist/tui/components/InitWizard.js.map +1 -0
  116. package/dist/tui/components/JobDetail.d.ts +12 -0
  117. package/dist/tui/components/JobDetail.d.ts.map +1 -0
  118. package/dist/tui/components/JobDetail.js +137 -0
  119. package/dist/tui/components/JobDetail.js.map +1 -0
  120. package/dist/tui/components/JobForm.d.ts +10 -0
  121. package/dist/tui/components/JobForm.d.ts.map +1 -0
  122. package/dist/tui/components/JobForm.js +183 -0
  123. package/dist/tui/components/JobForm.js.map +1 -0
  124. package/dist/tui/components/JobList.d.ts +11 -0
  125. package/dist/tui/components/JobList.d.ts.map +1 -0
  126. package/dist/tui/components/JobList.js +136 -0
  127. package/dist/tui/components/JobList.js.map +1 -0
  128. package/dist/tui/components/LogViewer.d.ts +10 -0
  129. package/dist/tui/components/LogViewer.d.ts.map +1 -0
  130. package/dist/tui/components/LogViewer.js +184 -0
  131. package/dist/tui/components/LogViewer.js.map +1 -0
  132. package/dist/tui/index.d.ts +11 -0
  133. package/dist/tui/index.d.ts.map +1 -0
  134. package/dist/tui/index.js +11 -0
  135. package/dist/tui/index.js.map +1 -0
  136. package/dist/tui/types.d.ts +21 -0
  137. package/dist/tui/types.d.ts.map +1 -0
  138. package/dist/tui/types.js +5 -0
  139. package/dist/tui/types.js.map +1 -0
  140. package/images/base-tasks/Dockerfile +33 -0
  141. package/images/node-tasks/Dockerfile +36 -0
  142. package/images/pipeline-runner/Dockerfile +43 -0
  143. package/images/pipeline-runner/entrypoint.sh +60 -0
  144. package/images/python-tasks/Dockerfile +43 -0
  145. package/package.json +91 -0
  146. package/scheduler.sh +522 -0
@@ -0,0 +1,373 @@
1
+ /**
2
+ * Scheduler logic - cron parsing and schedule matching
3
+ */
4
+ /**
5
+ * Cron field names for error messages
6
+ */
7
+ const CRON_FIELDS = ['minute', 'hour', 'day', 'month', 'weekday'];
8
+ /**
9
+ * Parse a cron field value and check if it matches the current value
10
+ */
11
+ function matchesCronField(field, currentValue) {
12
+ // Wildcard matches anything
13
+ if (field === '*') {
14
+ return true;
15
+ }
16
+ // Step values (*/n)
17
+ const stepMatch = field.match(/^\*\/(\d+)$/);
18
+ if (stepMatch) {
19
+ const step = parseInt(stepMatch[1], 10);
20
+ return currentValue % step === 0;
21
+ }
22
+ // Range with step (n-m/s)
23
+ const rangeStepMatch = field.match(/^(\d+)-(\d+)\/(\d+)$/);
24
+ if (rangeStepMatch) {
25
+ const start = parseInt(rangeStepMatch[1], 10);
26
+ const end = parseInt(rangeStepMatch[2], 10);
27
+ const step = parseInt(rangeStepMatch[3], 10);
28
+ if (currentValue < start || currentValue > end) {
29
+ return false;
30
+ }
31
+ return (currentValue - start) % step === 0;
32
+ }
33
+ // Range (n-m)
34
+ const rangeMatch = field.match(/^(\d+)-(\d+)$/);
35
+ if (rangeMatch) {
36
+ const start = parseInt(rangeMatch[1], 10);
37
+ const end = parseInt(rangeMatch[2], 10);
38
+ return currentValue >= start && currentValue <= end;
39
+ }
40
+ // Comma-separated values
41
+ if (field.includes(',')) {
42
+ const values = field.split(',');
43
+ return values.some((v) => matchesCronField(v.trim(), currentValue));
44
+ }
45
+ // Exact value
46
+ const exactValue = parseInt(field, 10);
47
+ if (!isNaN(exactValue)) {
48
+ return currentValue === exactValue;
49
+ }
50
+ return false;
51
+ }
52
+ /**
53
+ * Check if a weekday cron field matches, treating both 0 and 7 as Sunday.
54
+ * Standard cron: 0=Sunday, 1=Monday, ..., 6=Saturday, 7=Sunday.
55
+ * JS getDay(): 0=Sunday, 1=Monday, ..., 6=Saturday.
56
+ */
57
+ function matchesWeekdayField(field, currentWeekday) {
58
+ if (field === '*') {
59
+ return true;
60
+ }
61
+ // Check if the field matches the current weekday directly
62
+ if (matchesCronField(field, currentWeekday)) {
63
+ return true;
64
+ }
65
+ // If today is Sunday (0), also check against 7
66
+ if (currentWeekday === 0 && matchesCronField(field, 7)) {
67
+ return true;
68
+ }
69
+ // If the field contains 7 and today is Sunday (0), already handled above.
70
+ // If the field contains 0 and today is Sunday, already handled by direct match.
71
+ return false;
72
+ }
73
+ /**
74
+ * Check if a cron expression matches the current time
75
+ */
76
+ export function cronMatches(cronExpr, date = new Date()) {
77
+ const parts = cronExpr.trim().split(/\s+/);
78
+ if (parts.length !== 5) {
79
+ throw new Error(`Invalid cron expression: expected 5 fields, got ${parts.length}`);
80
+ }
81
+ const [minute, hour, day, month, weekday] = parts;
82
+ // Get current time components
83
+ const currentMinute = date.getMinutes();
84
+ const currentHour = date.getHours();
85
+ const currentDay = date.getDate();
86
+ const currentMonth = date.getMonth() + 1; // JavaScript months are 0-indexed
87
+ const currentWeekday = date.getDay(); // 0=Sunday, 6=Saturday
88
+ return (matchesCronField(minute, currentMinute) &&
89
+ matchesCronField(hour, currentHour) &&
90
+ matchesCronField(day, currentDay) &&
91
+ matchesCronField(month, currentMonth) &&
92
+ matchesWeekdayField(weekday, currentWeekday));
93
+ }
94
+ /**
95
+ * Check if a one-time schedule should run
96
+ */
97
+ export function onceShouldRun(datetime, lastRun) {
98
+ // Already run
99
+ if (lastRun) {
100
+ return false;
101
+ }
102
+ const targetTime = new Date(datetime).getTime();
103
+ const now = Date.now();
104
+ return now >= targetTime;
105
+ }
106
+ /**
107
+ * Check if a schedule should run now
108
+ */
109
+ export function shouldRunNow(schedule, lastRun) {
110
+ if (schedule.type === 'cron') {
111
+ return cronMatches(schedule.cron);
112
+ }
113
+ else if (schedule.type === 'once') {
114
+ return onceShouldRun(schedule.datetime, lastRun);
115
+ }
116
+ return false;
117
+ }
118
+ /**
119
+ * Parse a cron expression and return human-readable description
120
+ */
121
+ export function describeCron(cronExpr) {
122
+ const parts = cronExpr.trim().split(/\s+/);
123
+ if (parts.length !== 5) {
124
+ return 'Invalid cron expression';
125
+ }
126
+ const [minute, hour, day, month, weekday] = parts;
127
+ // Common patterns
128
+ if (minute === '*' && hour === '*' && day === '*' && month === '*' && weekday === '*') {
129
+ return 'Every minute';
130
+ }
131
+ if (minute.startsWith('*/') && hour === '*' && day === '*' && month === '*' && weekday === '*') {
132
+ const interval = minute.slice(2);
133
+ return `Every ${interval} minutes`;
134
+ }
135
+ if (hour.startsWith('*/') && day === '*' && month === '*' && weekday === '*') {
136
+ const interval = hour.slice(2);
137
+ const minPart = minute === '0' ? '' : ` at minute ${minute}`;
138
+ return `Every ${interval} hours${minPart}`;
139
+ }
140
+ if (minute !== '*' && hour !== '*' && day === '*' && month === '*' && weekday === '*') {
141
+ return `Every day at ${padTime(hour)}:${padTime(minute)}`;
142
+ }
143
+ if (minute !== '*' && hour !== '*' && day === '*' && month === '*' && weekday !== '*') {
144
+ const days = describeWeekday(weekday);
145
+ return `${days} at ${padTime(hour)}:${padTime(minute)}`;
146
+ }
147
+ if (minute !== '*' && hour !== '*' && day !== '*' && month === '*' && weekday === '*') {
148
+ return `Day ${day} of every month at ${padTime(hour)}:${padTime(minute)}`;
149
+ }
150
+ // Generic description
151
+ const desc = [];
152
+ if (minute !== '*')
153
+ desc.push(`minute ${minute}`);
154
+ if (hour !== '*')
155
+ desc.push(`hour ${hour}`);
156
+ if (day !== '*')
157
+ desc.push(`day ${day}`);
158
+ if (month !== '*')
159
+ desc.push(`month ${month}`);
160
+ if (weekday !== '*')
161
+ desc.push(`weekday ${weekday}`);
162
+ return desc.length > 0 ? `At ${desc.join(', ')}` : 'Every minute';
163
+ }
164
+ /**
165
+ * Describe a weekday field
166
+ */
167
+ function describeWeekday(field) {
168
+ // Support both 0=Sunday and 7=Sunday conventions
169
+ const names = {
170
+ 0: 'Sun', 1: 'Mon', 2: 'Tue', 3: 'Wed', 4: 'Thu', 5: 'Fri', 6: 'Sat', 7: 'Sun',
171
+ };
172
+ if (field.includes(',')) {
173
+ const days = field.split(',').map((d) => names[parseInt(d, 10)] || d);
174
+ return days.join(', ');
175
+ }
176
+ if (field.includes('-')) {
177
+ const [start, end] = field.split('-').map((d) => parseInt(d, 10));
178
+ return `${names[start] || start} to ${names[end] || end}`;
179
+ }
180
+ const day = parseInt(field, 10);
181
+ if (day in names) {
182
+ return `Every ${names[day]}`;
183
+ }
184
+ return `Weekday ${field}`;
185
+ }
186
+ /**
187
+ * Pad time value to 2 digits
188
+ */
189
+ function padTime(value) {
190
+ const num = parseInt(value, 10);
191
+ return isNaN(num) ? value : num.toString().padStart(2, '0');
192
+ }
193
+ /**
194
+ * Describe a one-time schedule
195
+ */
196
+ export function describeOnce(datetime) {
197
+ const date = new Date(datetime);
198
+ if (isNaN(date.getTime())) {
199
+ return 'Invalid datetime';
200
+ }
201
+ const now = new Date();
202
+ const diff = date.getTime() - now.getTime();
203
+ if (diff < 0) {
204
+ return `Scheduled for ${formatDateTime(date)} (past)`;
205
+ }
206
+ // Format relative time
207
+ const minutes = Math.floor(diff / 60000);
208
+ const hours = Math.floor(minutes / 60);
209
+ const days = Math.floor(hours / 24);
210
+ let relative;
211
+ if (days > 0) {
212
+ relative = `in ${days} day${days > 1 ? 's' : ''}`;
213
+ }
214
+ else if (hours > 0) {
215
+ relative = `in ${hours} hour${hours > 1 ? 's' : ''}`;
216
+ }
217
+ else if (minutes > 0) {
218
+ relative = `in ${minutes} minute${minutes > 1 ? 's' : ''}`;
219
+ }
220
+ else {
221
+ relative = 'shortly';
222
+ }
223
+ return `${formatDateTime(date)} (${relative})`;
224
+ }
225
+ /**
226
+ * Format a date for display
227
+ */
228
+ function formatDateTime(date) {
229
+ return date.toLocaleString('en-US', {
230
+ year: 'numeric',
231
+ month: 'short',
232
+ day: 'numeric',
233
+ hour: '2-digit',
234
+ minute: '2-digit',
235
+ });
236
+ }
237
+ /**
238
+ * Describe any schedule type
239
+ */
240
+ export function describeSchedule(schedule) {
241
+ if (schedule.type === 'cron') {
242
+ return describeCron(schedule.cron);
243
+ }
244
+ else {
245
+ return describeOnce(schedule.datetime);
246
+ }
247
+ }
248
+ /**
249
+ * Validate a cron expression
250
+ */
251
+ export function validateCron(cronExpr) {
252
+ const parts = cronExpr.trim().split(/\s+/);
253
+ if (parts.length !== 5) {
254
+ return `Expected 5 fields, got ${parts.length}`;
255
+ }
256
+ const ranges = [
257
+ { min: 0, max: 59 }, // minute
258
+ { min: 0, max: 23 }, // hour
259
+ { min: 1, max: 31 }, // day
260
+ { min: 1, max: 12 }, // month
261
+ { min: 0, max: 7 }, // weekday (0 and 7 are Sunday)
262
+ ];
263
+ for (let i = 0; i < 5; i++) {
264
+ const field = parts[i];
265
+ const { min, max } = ranges[i];
266
+ const error = validateCronField(field, min, max);
267
+ if (error) {
268
+ return `${CRON_FIELDS[i]}: ${error}`;
269
+ }
270
+ }
271
+ return null;
272
+ }
273
+ /**
274
+ * Validate a single cron field
275
+ */
276
+ function validateCronField(field, min, max) {
277
+ if (field === '*') {
278
+ return null;
279
+ }
280
+ // Handle comma-separated values
281
+ if (field.includes(',')) {
282
+ for (const part of field.split(',')) {
283
+ const error = validateCronField(part.trim(), min, max);
284
+ if (error)
285
+ return error;
286
+ }
287
+ return null;
288
+ }
289
+ // Handle step values
290
+ if (field.includes('/')) {
291
+ const [range, step] = field.split('/');
292
+ const stepNum = parseInt(step, 10);
293
+ if (isNaN(stepNum) || stepNum < 1) {
294
+ return `Invalid step value: ${step}`;
295
+ }
296
+ if (range !== '*') {
297
+ return validateCronField(range, min, max);
298
+ }
299
+ return null;
300
+ }
301
+ // Handle ranges
302
+ if (field.includes('-')) {
303
+ const [start, end] = field.split('-').map((s) => parseInt(s, 10));
304
+ if (isNaN(start) || isNaN(end)) {
305
+ return `Invalid range: ${field}`;
306
+ }
307
+ if (start < min || start > max) {
308
+ return `Start value ${start} out of range (${min}-${max})`;
309
+ }
310
+ if (end < min || end > max) {
311
+ return `End value ${end} out of range (${min}-${max})`;
312
+ }
313
+ if (start > end) {
314
+ return `Start value ${start} greater than end ${end}`;
315
+ }
316
+ return null;
317
+ }
318
+ // Handle single value
319
+ const value = parseInt(field, 10);
320
+ if (isNaN(value)) {
321
+ return `Invalid value: ${field}`;
322
+ }
323
+ if (value < min || value > max) {
324
+ return `Value ${value} out of range (${min}-${max})`;
325
+ }
326
+ return null;
327
+ }
328
+ /**
329
+ * Get next run time for a cron expression (approximate)
330
+ */
331
+ export function getNextRun(schedule) {
332
+ if (schedule.type === 'once') {
333
+ const date = new Date(schedule.datetime);
334
+ return isNaN(date.getTime()) ? null : date;
335
+ }
336
+ // For cron, find the next matching minute
337
+ const now = new Date();
338
+ const check = new Date(now);
339
+ check.setSeconds(0);
340
+ check.setMilliseconds(0);
341
+ // Check up to 1 week ahead
342
+ for (let i = 0; i < 60 * 24 * 7; i++) {
343
+ check.setMinutes(check.getMinutes() + 1);
344
+ if (cronMatches(schedule.cron, check)) {
345
+ return check;
346
+ }
347
+ }
348
+ return null;
349
+ }
350
+ /**
351
+ * Format relative time
352
+ */
353
+ export function formatRelativeTime(date) {
354
+ const now = Date.now();
355
+ const diff = date.getTime() - now;
356
+ const absDiff = Math.abs(diff);
357
+ const minutes = Math.floor(absDiff / 60000);
358
+ const hours = Math.floor(minutes / 60);
359
+ const days = Math.floor(hours / 24);
360
+ const suffix = diff < 0 ? ' ago' : '';
361
+ const prefix = diff >= 0 ? 'in ' : '';
362
+ if (days > 0) {
363
+ return `${prefix}${days} day${days > 1 ? 's' : ''}${suffix}`;
364
+ }
365
+ if (hours > 0) {
366
+ return `${prefix}${hours} hour${hours > 1 ? 's' : ''}${suffix}`;
367
+ }
368
+ if (minutes > 0) {
369
+ return `${prefix}${minutes} min${minutes > 1 ? 's' : ''}${suffix}`;
370
+ }
371
+ return diff >= 0 ? 'now' : 'just now';
372
+ }
373
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/core/scheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Setup logic for Agent Oven init wizard
3
+ * All functions are idempotent — they check state before acting.
4
+ */
5
+ import { getColimaStatus, startColima, isDockerAvailable } from './docker.js';
6
+ import type { Config } from './types.js';
7
+ export { getColimaStatus, startColima, isDockerAvailable };
8
+ export interface DependencyStatus {
9
+ installed: boolean;
10
+ version?: string;
11
+ }
12
+ /**
13
+ * Check if Homebrew is installed
14
+ */
15
+ export declare function checkHomebrew(): Promise<DependencyStatus>;
16
+ /**
17
+ * Check if a command-line dependency exists
18
+ */
19
+ export declare function checkDependency(name: string): Promise<DependencyStatus>;
20
+ /**
21
+ * Install a package via Homebrew
22
+ */
23
+ export declare function brewInstall(pkg: string, onOutput?: (line: string) => void): Promise<'installed' | 'already-installed' | 'failed'>;
24
+ /**
25
+ * Create required directories and files
26
+ */
27
+ export declare function setupFiles(projectDir: string): {
28
+ created: string[];
29
+ existed: string[];
30
+ };
31
+ /**
32
+ * Scan images/ directory for subdirs containing Dockerfiles
33
+ */
34
+ export declare function discoverImages(projectDir: string): string[];
35
+ /**
36
+ * Build a Docker image from the images/ directory
37
+ */
38
+ export declare function buildImage(projectDir: string, imageName: string, onOutput?: (line: string) => void): Promise<{
39
+ success: boolean;
40
+ error?: string;
41
+ }>;
42
+ /**
43
+ * Detect the system timezone
44
+ */
45
+ export declare function detectTimezone(): string;
46
+ /**
47
+ * Resolve the command array for the launchd plist ProgramArguments.
48
+ *
49
+ * Strategy:
50
+ * 1. Pin to the currently-running CLI process where possible.
51
+ * 2. Fallback to project-local dist/cli.js (for built source checkouts).
52
+ * 3. Fallback to package-local dist/cli.js (for npm global installs).
53
+ * 4. Final fallback: legacy scheduler.sh for unbuilt source checkouts.
54
+ */
55
+ export declare function resolveSchedulerCommand(projectDir: string): Promise<string[]>;
56
+ /**
57
+ * Generate launchd plist XML content
58
+ */
59
+ export declare function generatePlistContent(projectDir: string): Promise<string>;
60
+ /**
61
+ * Install the launchd agent
62
+ */
63
+ export declare function installLaunchd(projectDir: string): Promise<{
64
+ success: boolean;
65
+ error?: string;
66
+ }>;
67
+ /**
68
+ * Verify Docker is available and get version
69
+ */
70
+ export declare function verifyDocker(): Promise<{
71
+ available: boolean;
72
+ version?: string;
73
+ }>;
74
+ /**
75
+ * Build and save a full Config object from wizard selections
76
+ */
77
+ export declare function buildConfig(opts: {
78
+ projectDir: string;
79
+ cpu: number;
80
+ memory: number;
81
+ disk: number;
82
+ timezone: string;
83
+ }): Config;
84
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/core/setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE9E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAQ/D;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiB7E;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,WAAW,GAAG,mBAAmB,GAAG,QAAQ,CAAC,CAgCvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CA2BvF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAY3D;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8B/C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAkCnF;AASD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuC9E;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAyBtG;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAYtF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAsBT"}