@cjvana/claude-auto 0.1.1 → 0.1.2

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 (2) hide show
  1. package/dist/index.d.ts +615 -319
  2. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -1,11 +1,23 @@
1
- import { Document } from 'yaml';
2
- import { z } from 'zod';
3
- import Database from 'better-sqlite3';
1
+ import { Document } from "yaml";
2
+ import { z } from "zod";
3
+ import Database from "better-sqlite3";
4
4
 
5
- type CliCommand = "create" | "check-repo" | "list" | "logs" | "report" | "pause" | "resume" | "remove" | "edit" | "cost" | "dashboard" | "help";
5
+ type CliCommand =
6
+ | "create"
7
+ | "check-repo"
8
+ | "list"
9
+ | "logs"
10
+ | "report"
11
+ | "pause"
12
+ | "resume"
13
+ | "remove"
14
+ | "edit"
15
+ | "cost"
16
+ | "dashboard"
17
+ | "help";
6
18
  interface ParsedCommand {
7
- command: CliCommand;
8
- args: Record<string, string | number | boolean | undefined>;
19
+ command: CliCommand;
20
+ args: Record<string, string | number | boolean | undefined>;
9
21
  }
10
22
  type CommandHandler = (args: ParsedCommand["args"]) => Promise<void>;
11
23
  declare const COMMANDS: Record<string, string>;
@@ -25,7 +37,9 @@ declare function checkRepoCommand(args: ParsedCommand["args"]): Promise<void>;
25
37
  *
26
38
  * @param args - Parsed CLI arguments (jobId?: string, json?: boolean)
27
39
  */
28
- declare function costCommand(args: Record<string, string | number | boolean | undefined>): Promise<void>;
40
+ declare function costCommand(
41
+ args: Record<string, string | number | boolean | undefined>,
42
+ ): Promise<void>;
29
43
 
30
44
  /**
31
45
  * Create a new autonomous cron job. Validates all inputs, optionally clones the repo,
@@ -109,103 +123,179 @@ declare function parseCommand(argv: string[]): ParsedCommand;
109
123
  */
110
124
  declare function runCli(argv: string[]): Promise<void>;
111
125
 
112
- declare const JobConfigSchema: z.ZodObject<{
113
- id: z.ZodString;
114
- name: z.ZodString;
115
- repo: z.ZodObject<{
116
- path: z.ZodString;
117
- branch: z.ZodDefault<z.ZodString>;
118
- remote: z.ZodDefault<z.ZodString>;
119
- }, z.core.$strip>;
120
- schedule: z.ZodObject<{
121
- cron: z.ZodString;
122
- timezone: z.ZodDefault<z.ZodString>;
123
- }, z.core.$strip>;
124
- focus: z.ZodDefault<z.ZodArray<z.ZodEnum<{
125
- "open-issues": "open-issues";
126
- "bug-discovery": "bug-discovery";
127
- features: "features";
128
- documentation: "documentation";
129
- }>>>;
130
- systemPrompt: z.ZodOptional<z.ZodString>;
131
- guardrails: z.ZodDefault<z.ZodObject<{
132
- maxTurns: z.ZodDefault<z.ZodNumber>;
133
- maxBudgetUsd: z.ZodDefault<z.ZodNumber>;
134
- noNewDependencies: z.ZodDefault<z.ZodBoolean>;
135
- noArchitectureChanges: z.ZodDefault<z.ZodBoolean>;
136
- bugFixOnly: z.ZodDefault<z.ZodBoolean>;
137
- restrictToPaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
138
- }, z.core.$strip>>;
139
- notifications: z.ZodDefault<z.ZodObject<{
140
- discord: z.ZodOptional<z.ZodObject<{
141
- webhookUrl: z.ZodString;
142
- onSuccess: z.ZodDefault<z.ZodBoolean>;
143
- onFailure: z.ZodDefault<z.ZodBoolean>;
144
- onNoChanges: z.ZodDefault<z.ZodBoolean>;
145
- onLocked: z.ZodDefault<z.ZodBoolean>;
146
- }, z.core.$strip>>;
147
- slack: z.ZodOptional<z.ZodObject<{
148
- webhookUrl: z.ZodString;
149
- onSuccess: z.ZodDefault<z.ZodBoolean>;
150
- onFailure: z.ZodDefault<z.ZodBoolean>;
151
- onNoChanges: z.ZodDefault<z.ZodBoolean>;
152
- onLocked: z.ZodDefault<z.ZodBoolean>;
153
- }, z.core.$strip>>;
154
- telegram: z.ZodOptional<z.ZodObject<{
155
- botToken: z.ZodString;
156
- chatId: z.ZodString;
157
- onSuccess: z.ZodDefault<z.ZodBoolean>;
158
- onFailure: z.ZodDefault<z.ZodBoolean>;
159
- onNoChanges: z.ZodDefault<z.ZodBoolean>;
160
- onLocked: z.ZodDefault<z.ZodBoolean>;
161
- }, z.core.$strip>>;
162
- }, z.core.$strip>>;
163
- enabled: z.ZodDefault<z.ZodBoolean>;
164
- model: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
165
- default: "default";
166
- sonnet: "sonnet";
167
- opus: "opus";
168
- haiku: "haiku";
169
- opusplan: "opusplan";
170
- }>, z.ZodString]>>;
171
- budget: z.ZodOptional<z.ZodObject<{
172
- dailyUsd: z.ZodOptional<z.ZodNumber>;
173
- weeklyUsd: z.ZodOptional<z.ZodNumber>;
174
- monthlyUsd: z.ZodOptional<z.ZodNumber>;
175
- }, z.core.$strip>>;
176
- maxFeedbackRounds: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
177
- pipeline: z.ZodOptional<z.ZodObject<{
178
- enabled: z.ZodDefault<z.ZodBoolean>;
179
- planModel: z.ZodDefault<z.ZodUnion<readonly [z.ZodEnum<{
180
- default: "default";
181
- sonnet: "sonnet";
182
- opus: "opus";
183
- haiku: "haiku";
184
- opusplan: "opusplan";
185
- }>, z.ZodString]>>;
186
- implementModel: z.ZodDefault<z.ZodUnion<readonly [z.ZodEnum<{
187
- default: "default";
188
- sonnet: "sonnet";
189
- opus: "opus";
190
- haiku: "haiku";
191
- opusplan: "opusplan";
192
- }>, z.ZodString]>>;
193
- reviewModel: z.ZodDefault<z.ZodUnion<readonly [z.ZodEnum<{
194
- default: "default";
195
- sonnet: "sonnet";
196
- opus: "opus";
197
- haiku: "haiku";
198
- opusplan: "opusplan";
199
- }>, z.ZodString]>>;
200
- maxReviewRounds: z.ZodDefault<z.ZodNumber>;
201
- }, z.core.$strip>>;
202
- }, z.core.$strip>;
126
+ declare const JobConfigSchema: z.ZodObject<
127
+ {
128
+ id: z.ZodString;
129
+ name: z.ZodString;
130
+ repo: z.ZodObject<
131
+ {
132
+ path: z.ZodString;
133
+ branch: z.ZodDefault<z.ZodString>;
134
+ remote: z.ZodDefault<z.ZodString>;
135
+ },
136
+ z.core.$strip
137
+ >;
138
+ schedule: z.ZodObject<
139
+ {
140
+ cron: z.ZodString;
141
+ timezone: z.ZodDefault<z.ZodString>;
142
+ },
143
+ z.core.$strip
144
+ >;
145
+ focus: z.ZodDefault<
146
+ z.ZodArray<
147
+ z.ZodEnum<{
148
+ "open-issues": "open-issues";
149
+ "bug-discovery": "bug-discovery";
150
+ features: "features";
151
+ documentation: "documentation";
152
+ }>
153
+ >
154
+ >;
155
+ systemPrompt: z.ZodOptional<z.ZodString>;
156
+ guardrails: z.ZodDefault<
157
+ z.ZodObject<
158
+ {
159
+ maxTurns: z.ZodDefault<z.ZodNumber>;
160
+ maxBudgetUsd: z.ZodDefault<z.ZodNumber>;
161
+ noNewDependencies: z.ZodDefault<z.ZodBoolean>;
162
+ noArchitectureChanges: z.ZodDefault<z.ZodBoolean>;
163
+ bugFixOnly: z.ZodDefault<z.ZodBoolean>;
164
+ restrictToPaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
165
+ },
166
+ z.core.$strip
167
+ >
168
+ >;
169
+ notifications: z.ZodDefault<
170
+ z.ZodObject<
171
+ {
172
+ discord: z.ZodOptional<
173
+ z.ZodObject<
174
+ {
175
+ webhookUrl: z.ZodString;
176
+ onSuccess: z.ZodDefault<z.ZodBoolean>;
177
+ onFailure: z.ZodDefault<z.ZodBoolean>;
178
+ onNoChanges: z.ZodDefault<z.ZodBoolean>;
179
+ onLocked: z.ZodDefault<z.ZodBoolean>;
180
+ },
181
+ z.core.$strip
182
+ >
183
+ >;
184
+ slack: z.ZodOptional<
185
+ z.ZodObject<
186
+ {
187
+ webhookUrl: z.ZodString;
188
+ onSuccess: z.ZodDefault<z.ZodBoolean>;
189
+ onFailure: z.ZodDefault<z.ZodBoolean>;
190
+ onNoChanges: z.ZodDefault<z.ZodBoolean>;
191
+ onLocked: z.ZodDefault<z.ZodBoolean>;
192
+ },
193
+ z.core.$strip
194
+ >
195
+ >;
196
+ telegram: z.ZodOptional<
197
+ z.ZodObject<
198
+ {
199
+ botToken: z.ZodString;
200
+ chatId: z.ZodString;
201
+ onSuccess: z.ZodDefault<z.ZodBoolean>;
202
+ onFailure: z.ZodDefault<z.ZodBoolean>;
203
+ onNoChanges: z.ZodDefault<z.ZodBoolean>;
204
+ onLocked: z.ZodDefault<z.ZodBoolean>;
205
+ },
206
+ z.core.$strip
207
+ >
208
+ >;
209
+ },
210
+ z.core.$strip
211
+ >
212
+ >;
213
+ enabled: z.ZodDefault<z.ZodBoolean>;
214
+ model: z.ZodOptional<
215
+ z.ZodUnion<
216
+ readonly [
217
+ z.ZodEnum<{
218
+ default: "default";
219
+ sonnet: "sonnet";
220
+ opus: "opus";
221
+ haiku: "haiku";
222
+ opusplan: "opusplan";
223
+ }>,
224
+ z.ZodString,
225
+ ]
226
+ >
227
+ >;
228
+ budget: z.ZodOptional<
229
+ z.ZodObject<
230
+ {
231
+ dailyUsd: z.ZodOptional<z.ZodNumber>;
232
+ weeklyUsd: z.ZodOptional<z.ZodNumber>;
233
+ monthlyUsd: z.ZodOptional<z.ZodNumber>;
234
+ },
235
+ z.core.$strip
236
+ >
237
+ >;
238
+ maxFeedbackRounds: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
239
+ pipeline: z.ZodOptional<
240
+ z.ZodObject<
241
+ {
242
+ enabled: z.ZodDefault<z.ZodBoolean>;
243
+ planModel: z.ZodDefault<
244
+ z.ZodUnion<
245
+ readonly [
246
+ z.ZodEnum<{
247
+ default: "default";
248
+ sonnet: "sonnet";
249
+ opus: "opus";
250
+ haiku: "haiku";
251
+ opusplan: "opusplan";
252
+ }>,
253
+ z.ZodString,
254
+ ]
255
+ >
256
+ >;
257
+ implementModel: z.ZodDefault<
258
+ z.ZodUnion<
259
+ readonly [
260
+ z.ZodEnum<{
261
+ default: "default";
262
+ sonnet: "sonnet";
263
+ opus: "opus";
264
+ haiku: "haiku";
265
+ opusplan: "opusplan";
266
+ }>,
267
+ z.ZodString,
268
+ ]
269
+ >
270
+ >;
271
+ reviewModel: z.ZodDefault<
272
+ z.ZodUnion<
273
+ readonly [
274
+ z.ZodEnum<{
275
+ default: "default";
276
+ sonnet: "sonnet";
277
+ opus: "opus";
278
+ haiku: "haiku";
279
+ opusplan: "opusplan";
280
+ }>,
281
+ z.ZodString,
282
+ ]
283
+ >
284
+ >;
285
+ maxReviewRounds: z.ZodDefault<z.ZodNumber>;
286
+ },
287
+ z.core.$strip
288
+ >
289
+ >;
290
+ },
291
+ z.core.$strip
292
+ >;
203
293
  type JobConfig = z.infer<typeof JobConfigSchema>;
204
294
  interface ScheduleInfo {
205
- cron: string;
206
- timezone: string;
207
- humanReadable: string;
208
- nextRuns: Date[];
295
+ cron: string;
296
+ timezone: string;
297
+ humanReadable: string;
298
+ nextRuns: Date[];
209
299
  }
210
300
 
211
301
  /**
@@ -268,7 +358,10 @@ declare function readJob(jobId: string): Promise<JobConfig>;
268
358
  * Update specified fields of a job config while preserving YAML comments.
269
359
  * Validates the result before writing. Rejects invalid updates.
270
360
  */
271
- declare function updateJob(jobId: string, updates: Partial<Omit<JobConfig, "id">>): Promise<JobConfig>;
361
+ declare function updateJob(
362
+ jobId: string,
363
+ updates: Partial<Omit<JobConfig, "id">>,
364
+ ): Promise<JobConfig>;
272
365
  /**
273
366
  * Delete a job and its entire directory.
274
367
  * Idempotent: does not throw if the job doesn't exist.
@@ -301,89 +394,97 @@ declare function getNextRuns(cronExpr: string, timezone: string, count?: number)
301
394
  declare function validateAndDescribeSchedule(cronExpr: string, timezone: string): ScheduleInfo;
302
395
 
303
396
  interface SpawnOptions {
304
- cwd: string;
305
- prompt: string;
306
- maxTurns: number;
307
- maxBudgetUsd: number;
308
- allowedTools: string[];
309
- appendSystemPrompt?: string;
310
- model?: string;
311
- env?: Record<string, string>;
397
+ cwd: string;
398
+ prompt: string;
399
+ maxTurns: number;
400
+ maxBudgetUsd: number;
401
+ allowedTools: string[];
402
+ appendSystemPrompt?: string;
403
+ model?: string;
404
+ env?: Record<string, string>;
312
405
  }
313
406
  interface SpawnResult {
314
- success: boolean;
315
- result: string;
316
- summary: string;
317
- sessionId: string;
318
- costUsd: number;
319
- numTurns: number;
320
- durationMs: number;
321
- isError: boolean;
322
- subtype: string;
323
- errors?: string[];
407
+ success: boolean;
408
+ result: string;
409
+ summary: string;
410
+ sessionId: string;
411
+ costUsd: number;
412
+ numTurns: number;
413
+ durationMs: number;
414
+ isError: boolean;
415
+ subtype: string;
416
+ errors?: string[];
324
417
  }
325
- type RunStatus = "success" | "no-changes" | "error" | "locked" | "git-error" | "paused" | "budget-exceeded" | "needs-human-review" | "merge-conflict";
418
+ type RunStatus =
419
+ | "success"
420
+ | "no-changes"
421
+ | "error"
422
+ | "locked"
423
+ | "git-error"
424
+ | "paused"
425
+ | "budget-exceeded"
426
+ | "needs-human-review"
427
+ | "merge-conflict";
326
428
  interface RunResult {
327
- status: RunStatus;
328
- jobId: string;
329
- runId: string;
330
- startedAt: string;
331
- completedAt: string;
332
- durationMs: number;
333
- prUrl?: string;
334
- summary?: string;
335
- costUsd?: number;
336
- numTurns?: number;
337
- sessionId?: string;
338
- error?: string;
339
- branchName?: string;
340
- issueNumber?: number;
341
- model?: string;
342
- feedbackRound?: number;
343
- prNumber?: number;
344
- pipelineStages?: Array<{
345
- stage: string;
346
- costUsd: number;
347
- durationMs: number;
348
- numTurns: number;
349
- }>;
350
- }
351
- interface RunLogEntry extends RunResult {
429
+ status: RunStatus;
430
+ jobId: string;
431
+ runId: string;
432
+ startedAt: string;
433
+ completedAt: string;
434
+ durationMs: number;
435
+ prUrl?: string;
436
+ summary?: string;
437
+ costUsd?: number;
438
+ numTurns?: number;
439
+ sessionId?: string;
440
+ error?: string;
441
+ branchName?: string;
442
+ issueNumber?: number;
443
+ model?: string;
444
+ feedbackRound?: number;
445
+ prNumber?: number;
446
+ pipelineStages?: Array<{
447
+ stage: string;
448
+ costUsd: number;
449
+ durationMs: number;
450
+ numTurns: number;
451
+ }>;
352
452
  }
453
+ interface RunLogEntry extends RunResult {}
353
454
  interface ReviewThread {
354
- id: string;
355
- isResolved: boolean;
356
- comments: Array<{
357
- body: string;
358
- author: {
359
- login: string;
360
- };
361
- }>;
455
+ id: string;
456
+ isResolved: boolean;
457
+ comments: Array<{
458
+ body: string;
459
+ author: {
460
+ login: string;
461
+ };
462
+ }>;
362
463
  }
363
464
  interface PRFeedbackContext {
364
- number: number;
365
- title: string;
366
- headRefName: string;
367
- url: string;
368
- reviewDecision: string;
369
- unresolvedThreads: ReviewThread[];
370
- currentRound: number;
465
+ number: number;
466
+ title: string;
467
+ headRefName: string;
468
+ url: string;
469
+ reviewDecision: string;
470
+ unresolvedThreads: ReviewThread[];
471
+ currentRound: number;
371
472
  }
372
473
  interface PipelineStageResult {
373
- stage: "plan" | "implement" | "review" | "fix";
374
- spawnResult: SpawnResult;
474
+ stage: "plan" | "implement" | "review" | "fix";
475
+ spawnResult: SpawnResult;
375
476
  }
376
477
  interface PipelineResult {
377
- stages: PipelineStageResult[];
378
- reviewVerdict: "pass" | "fail" | "skipped";
379
- totalCostUsd: number;
380
- totalDurationMs: number;
381
- summary: string;
478
+ stages: PipelineStageResult[];
479
+ reviewVerdict: "pass" | "fail" | "skipped";
480
+ totalCostUsd: number;
481
+ totalDurationMs: number;
482
+ summary: string;
382
483
  }
383
484
  interface RebaseResult {
384
- diverged: boolean;
385
- rebased: boolean;
386
- conflicts: string[];
485
+ diverged: boolean;
486
+ rebased: boolean;
487
+ conflicts: string[];
387
488
  }
388
489
 
389
490
  /**
@@ -394,29 +495,37 @@ interface RebaseResult {
394
495
  */
395
496
  declare function sendNotifications(config: JobConfig, result: RunResult): Promise<void>;
396
497
 
397
- type NotificationEvent = "success" | "no-changes" | "error" | "locked" | "git-error" | "budget-exceeded" | "merge-conflict" | "needs-human-review";
498
+ type NotificationEvent =
499
+ | "success"
500
+ | "no-changes"
501
+ | "error"
502
+ | "locked"
503
+ | "git-error"
504
+ | "budget-exceeded"
505
+ | "merge-conflict"
506
+ | "needs-human-review";
398
507
  interface NotificationPayload {
399
- event: NotificationEvent;
400
- jobId: string;
401
- jobName: string;
402
- runId: string;
403
- repoPath: string;
404
- branch: string;
405
- startedAt: string;
406
- completedAt: string;
407
- durationMs: number;
408
- prUrl?: string;
409
- summary?: string;
410
- costUsd?: number;
411
- numTurns?: number;
412
- error?: string;
413
- branchName?: string;
508
+ event: NotificationEvent;
509
+ jobId: string;
510
+ jobName: string;
511
+ runId: string;
512
+ repoPath: string;
513
+ branch: string;
514
+ startedAt: string;
515
+ completedAt: string;
516
+ durationMs: number;
517
+ prUrl?: string;
518
+ summary?: string;
519
+ costUsd?: number;
520
+ numTurns?: number;
521
+ error?: string;
522
+ branchName?: string;
414
523
  }
415
524
  interface EventTriggers {
416
- onSuccess?: boolean;
417
- onFailure?: boolean;
418
- onNoChanges?: boolean;
419
- onLocked?: boolean;
525
+ onSuccess?: boolean;
526
+ onFailure?: boolean;
527
+ onNoChanges?: boolean;
528
+ onLocked?: boolean;
420
529
  }
421
530
  /**
422
531
  * Determines whether a notification should be sent for a given run status
@@ -458,13 +567,13 @@ declare function formatTelegram(payload: NotificationPayload, chatId: string): o
458
567
  */
459
568
  declare function extractIssueNumber(text: string): number | undefined;
460
569
  interface PostIssueCommentOptions {
461
- repoPath: string;
462
- issueNumber: number;
463
- status: RunStatus;
464
- prUrl?: string;
465
- summary?: string;
466
- error?: string;
467
- jobName: string;
570
+ repoPath: string;
571
+ issueNumber: number;
572
+ status: RunStatus;
573
+ prUrl?: string;
574
+ summary?: string;
575
+ error?: string;
576
+ jobName: string;
468
577
  }
469
578
  /**
470
579
  * Post a comment on a GitHub issue about the run result.
@@ -475,15 +584,15 @@ interface PostIssueCommentOptions {
475
584
  declare function postIssueComment(options: PostIssueCommentOptions): Promise<void>;
476
585
 
477
586
  interface RegisteredJob {
478
- jobId: string;
479
- schedule: string;
480
- command: string;
587
+ jobId: string;
588
+ schedule: string;
589
+ command: string;
481
590
  }
482
591
  interface Scheduler {
483
- register(job: JobConfig, env?: Record<string, string>): Promise<void>;
484
- unregister(jobId: string): Promise<void>;
485
- isRegistered(jobId: string): Promise<boolean>;
486
- list(): Promise<RegisteredJob[]>;
592
+ register(job: JobConfig, env?: Record<string, string>): Promise<void>;
593
+ unregister(jobId: string): Promise<void>;
594
+ isRegistered(jobId: string): Promise<boolean>;
595
+ list(): Promise<RegisteredJob[]>;
487
596
  }
488
597
  /**
489
598
  * Factory function that returns the correct Scheduler implementation
@@ -497,10 +606,10 @@ declare function createScheduler(): Promise<Scheduler>;
497
606
  * Uses comment-tagged crontab entries for identification and CRUD.
498
607
  */
499
608
  declare class CrontabScheduler implements Scheduler {
500
- register(job: JobConfig, _env?: Record<string, string>): Promise<void>;
501
- unregister(jobId: string): Promise<void>;
502
- isRegistered(jobId: string): Promise<boolean>;
503
- list(): Promise<RegisteredJob[]>;
609
+ register(job: JobConfig, _env?: Record<string, string>): Promise<void>;
610
+ unregister(jobId: string): Promise<void>;
611
+ isRegistered(jobId: string): Promise<boolean>;
612
+ list(): Promise<RegisteredJob[]>;
504
613
  }
505
614
 
506
615
  type Platform = "linux" | "darwin" | "win32";
@@ -511,11 +620,11 @@ type Platform = "linux" | "darwin" | "win32";
511
620
  declare function detectPlatform(): Platform;
512
621
 
513
622
  interface CalendarInterval {
514
- Month?: number;
515
- Day?: number;
516
- Weekday?: number;
517
- Hour?: number;
518
- Minute?: number;
623
+ Month?: number;
624
+ Day?: number;
625
+ Weekday?: number;
626
+ Hour?: number;
627
+ Minute?: number;
519
628
  }
520
629
  /**
521
630
  * Convert a 5-field cron expression to launchd scheduling config.
@@ -526,23 +635,23 @@ interface CalendarInterval {
526
635
  * Throws if the expression would produce more than 50 calendar intervals.
527
636
  */
528
637
  declare function cronToCalendarIntervals(cronExpr: string): {
529
- calendarIntervals?: CalendarInterval[];
530
- startInterval?: number;
638
+ calendarIntervals?: CalendarInterval[];
639
+ startInterval?: number;
531
640
  };
532
641
  /**
533
642
  * LaunchdScheduler implements the Scheduler interface for macOS.
534
643
  * Uses plist files in ~/Library/LaunchAgents/ and modern launchctl bootstrap/bootout.
535
644
  */
536
645
  declare class LaunchdScheduler implements Scheduler {
537
- register(job: JobConfig, env?: Record<string, string>): Promise<void>;
538
- unregister(jobId: string): Promise<void>;
539
- isRegistered(jobId: string): Promise<boolean>;
540
- list(): Promise<RegisteredJob[]>;
646
+ register(job: JobConfig, env?: Record<string, string>): Promise<void>;
647
+ unregister(jobId: string): Promise<void>;
648
+ isRegistered(jobId: string): Promise<boolean>;
649
+ list(): Promise<RegisteredJob[]>;
541
650
  }
542
651
 
543
652
  interface SchtasksSchedule {
544
- args: string[];
545
- description: string;
653
+ args: string[];
654
+ description: string;
546
655
  }
547
656
  /**
548
657
  * Translate a 5-field cron expression into schtasks /SC schedule parameters.
@@ -565,10 +674,10 @@ declare function cronToSchtasks(cronExpr: string): SchtasksSchedule;
565
674
  * Task name format: `claude-auto-{jobId}`
566
675
  */
567
676
  declare class SchtasksScheduler implements Scheduler {
568
- register(job: JobConfig, _env?: Record<string, string>): Promise<void>;
569
- unregister(jobId: string): Promise<void>;
570
- isRegistered(jobId: string): Promise<boolean>;
571
- list(): Promise<RegisteredJob[]>;
677
+ register(job: JobConfig, _env?: Record<string, string>): Promise<void>;
678
+ unregister(jobId: string): Promise<void>;
679
+ isRegistered(jobId: string): Promise<boolean>;
680
+ list(): Promise<RegisteredJob[]>;
572
681
  }
573
682
 
574
683
  /**
@@ -576,13 +685,13 @@ declare class SchtasksScheduler implements Scheduler {
576
685
  * (issue numbers, PR URLs, branch names) -- never raw narrative summaries.
577
686
  */
578
687
  interface RunContext {
579
- id: string;
580
- status: string;
581
- pr_url: string | null;
582
- branch_name: string | null;
583
- issue_number: number | null;
584
- summary: string | null;
585
- started_at: string;
688
+ id: string;
689
+ status: string;
690
+ pr_url: string | null;
691
+ branch_name: string | null;
692
+ issue_number: number | null;
693
+ summary: string | null;
694
+ started_at: string;
586
695
  }
587
696
  /**
588
697
  * Persist a run log entry to the SQLite database.
@@ -617,28 +726,28 @@ declare function formatContextWindow(context: RunContext[]): string;
617
726
  * before spawning a new run.
618
727
  */
619
728
  interface BudgetConfig {
620
- dailyUsd?: number;
621
- weeklyUsd?: number;
622
- monthlyUsd?: number;
729
+ dailyUsd?: number;
730
+ weeklyUsd?: number;
731
+ monthlyUsd?: number;
623
732
  }
624
733
  /**
625
734
  * Per-job cost summary row returned by getCostSummary() when no jobId is specified.
626
735
  */
627
736
  interface CostSummaryRow {
628
- job_id: string;
629
- runs: number;
630
- total_cost: number;
631
- avg_cost: number;
632
- total_turns: number;
737
+ job_id: string;
738
+ runs: number;
739
+ total_cost: number;
740
+ avg_cost: number;
741
+ total_turns: number;
633
742
  }
634
743
  /**
635
744
  * Per-day cost breakdown row returned by getCostSummary(jobId).
636
745
  */
637
746
  interface DailyCostRow {
638
- day: string;
639
- runs: number;
640
- total_cost: number;
641
- total_turns: number;
747
+ day: string;
748
+ runs: number;
749
+ total_cost: number;
750
+ total_turns: number;
642
751
  }
643
752
  /**
644
753
  * Check whether cumulative cost for a job exceeds any configured budget cap.
@@ -697,7 +806,13 @@ declare function checkoutExistingBranch(repoPath: string, branchName: string): P
697
806
  * Create a pull request via GitHub CLI.
698
807
  * Returns the PR URL.
699
808
  */
700
- declare function createPR(repoPath: string, branchName: string, baseBranch: string, title: string, body: string): Promise<string>;
809
+ declare function createPR(
810
+ repoPath: string,
811
+ branchName: string,
812
+ baseBranch: string,
813
+ title: string,
814
+ body: string,
815
+ ): Promise<string>;
701
816
  /**
702
817
  * Check if the target branch has diverged from the current branch.
703
818
  * Fetches the remote base branch first, then uses git merge-base --is-ancestor
@@ -705,13 +820,21 @@ declare function createPR(repoPath: string, branchName: string, baseBranch: stri
705
820
  *
706
821
  * @returns true if diverged (remote base has commits not in current branch), false otherwise
707
822
  */
708
- declare function checkDivergence(repoPath: string, baseBranch: string, remote: string): Promise<boolean>;
823
+ declare function checkDivergence(
824
+ repoPath: string,
825
+ baseBranch: string,
826
+ remote: string,
827
+ ): Promise<boolean>;
709
828
  /**
710
829
  * Attempt to rebase the current branch onto the remote base branch.
711
830
  * First checks for divergence; if not diverged, returns early.
712
831
  * If diverged, attempts rebase. On conflict, aborts cleanly and returns conflict list.
713
832
  */
714
- declare function attemptRebase(repoPath: string, baseBranch: string, remote: string): Promise<RebaseResult>;
833
+ declare function attemptRebase(
834
+ repoPath: string,
835
+ baseBranch: string,
836
+ remote: string,
837
+ ): Promise<RebaseResult>;
715
838
  /**
716
839
  * Get the diff between the base branch and HEAD.
717
840
  * Best-effort: returns empty string on error.
@@ -723,12 +846,12 @@ declare function getDiffFromBase(repoPath: string, baseBranch: string): Promise<
723
846
  * Body is truncated to 1000 chars to reduce token usage.
724
847
  */
725
848
  interface ScoredIssue {
726
- number: number;
727
- title: string;
728
- body: string;
729
- labels: string[];
730
- score: number;
731
- skipReason?: string;
849
+ number: number;
850
+ title: string;
851
+ body: string;
852
+ labels: string[];
853
+ score: number;
854
+ skipReason?: string;
732
855
  }
733
856
  /**
734
857
  * Triage GitHub issues for a repository by scoring and filtering them
@@ -818,7 +941,13 @@ declare function executeRun(jobId: string): Promise<RunResult>;
818
941
  * @param triaged - Pre-scored issues from triage
819
942
  * @returns PipelineResult with all stage results aggregated
820
943
  */
821
- declare function runPipeline(config: JobConfig, repoPath: string, _branchName: string, runContext: RunContext[], triaged: ScoredIssue[]): Promise<PipelineResult>;
944
+ declare function runPipeline(
945
+ config: JobConfig,
946
+ repoPath: string,
947
+ _branchName: string,
948
+ runContext: RunContext[],
949
+ triaged: ScoredIssue[],
950
+ ): Promise<PipelineResult>;
822
951
 
823
952
  /**
824
953
  * Build a read-only tool set for plan and review stages.
@@ -839,7 +968,11 @@ declare function buildReadOnlyTools(_config: JobConfig): string[];
839
968
  * @param context - Prior run context for duplicate avoidance
840
969
  * @returns Multi-section plan prompt string
841
970
  */
842
- declare function buildPlanPrompt(config: JobConfig, triaged: ScoredIssue[], context: RunContext[]): string;
971
+ declare function buildPlanPrompt(
972
+ config: JobConfig,
973
+ triaged: ScoredIssue[],
974
+ context: RunContext[],
975
+ ): string;
843
976
  /**
844
977
  * Build the system prompt for the PLAN stage.
845
978
  *
@@ -857,7 +990,11 @@ declare function buildPlanSystemPrompt(config: JobConfig): string;
857
990
  * @param context - Prior run context for duplicate avoidance
858
991
  * @returns Multi-section implement prompt string
859
992
  */
860
- declare function buildImplementPrompt(config: JobConfig, planResult: SpawnResult, context: RunContext[]): string;
993
+ declare function buildImplementPrompt(
994
+ config: JobConfig,
995
+ planResult: SpawnResult,
996
+ context: RunContext[],
997
+ ): string;
861
998
  /**
862
999
  * Build the system prompt for the IMPLEMENT stage.
863
1000
  *
@@ -874,7 +1011,11 @@ declare function buildImplementSystemPrompt(config: JobConfig): string;
874
1011
  * @param diffOutput - Git diff of implementation changes
875
1012
  * @returns Multi-section review prompt string
876
1013
  */
877
- declare function buildReviewPrompt(_config: JobConfig, planText: string, diffOutput: string): string;
1014
+ declare function buildReviewPrompt(
1015
+ _config: JobConfig,
1016
+ planText: string,
1017
+ diffOutput: string,
1018
+ ): string;
878
1019
  /**
879
1020
  * Build the system prompt for the REVIEW stage.
880
1021
  *
@@ -914,11 +1055,11 @@ declare function parseReviewVerdict(reviewResult: SpawnResult): "pass" | "fail";
914
1055
  * Not exported -- external consumers use PRFeedbackContext.
915
1056
  */
916
1057
  interface PRWithFeedback {
917
- number: number;
918
- title: string;
919
- headRefName: string;
920
- reviewDecision: string;
921
- url: string;
1058
+ number: number;
1059
+ title: string;
1060
+ headRefName: string;
1061
+ reviewDecision: string;
1062
+ url: string;
922
1063
  }
923
1064
  /**
924
1065
  * List open PRs authored by the current user that match this job's branch prefix.
@@ -928,7 +1069,10 @@ interface PRWithFeedback {
928
1069
  * @param jobId - Job identifier used to filter branches by prefix
929
1070
  * @returns Array of PRs matching the claude-auto/{jobId}/ branch prefix
930
1071
  */
931
- declare function listOpenPRsWithFeedback(repoPath: string, jobId: string): Promise<PRWithFeedback[]>;
1072
+ declare function listOpenPRsWithFeedback(
1073
+ repoPath: string,
1074
+ jobId: string,
1075
+ ): Promise<PRWithFeedback[]>;
932
1076
  /**
933
1077
  * Get the owner and name of the repository from `gh repo view`.
934
1078
  *
@@ -936,8 +1080,8 @@ declare function listOpenPRsWithFeedback(repoPath: string, jobId: string): Promi
936
1080
  * @returns Object with owner (login) and name of the repository
937
1081
  */
938
1082
  declare function getRepoOwnerName(repoPath: string): Promise<{
939
- owner: string;
940
- name: string;
1083
+ owner: string;
1084
+ name: string;
941
1085
  }>;
942
1086
  /**
943
1087
  * Fetch unresolved review threads for a PR using the GitHub GraphQL API.
@@ -985,7 +1129,11 @@ declare function getFeedbackRound(jobId: string, prNumber: number): number;
985
1129
  * @param maxRounds - Maximum number of feedback rounds allowed
986
1130
  * @returns PRFeedbackContext if there's actionable feedback, null otherwise
987
1131
  */
988
- declare function checkPendingPRFeedback(repoPath: string, jobId: string, maxRounds: number): Promise<PRFeedbackContext | null>;
1132
+ declare function checkPendingPRFeedback(
1133
+ repoPath: string,
1134
+ jobId: string,
1135
+ maxRounds: number,
1136
+ ): Promise<PRFeedbackContext | null>;
989
1137
 
990
1138
  /**
991
1139
  * Build the system prompt for Claude, including research instructions
@@ -1020,7 +1168,11 @@ declare function buildWorkPrompt(config: JobConfig, context?: RunContext[]): str
1020
1168
  * @param context - Optional array of prior run context
1021
1169
  * @returns Multi-section feedback prompt string
1022
1170
  */
1023
- declare function buildFeedbackPrompt(config: JobConfig, feedback: PRFeedbackContext, context?: RunContext[]): string;
1171
+ declare function buildFeedbackPrompt(
1172
+ config: JobConfig,
1173
+ feedback: PRFeedbackContext,
1174
+ context?: RunContext[],
1175
+ ): string;
1024
1176
  /**
1025
1177
  * Build a work prompt enhanced with pre-triaged issue candidates.
1026
1178
  *
@@ -1033,7 +1185,11 @@ declare function buildFeedbackPrompt(config: JobConfig, feedback: PRFeedbackCont
1033
1185
  * @param context - Optional array of prior run context
1034
1186
  * @returns Multi-section work prompt string
1035
1187
  */
1036
- declare function buildTriagedWorkPrompt(config: JobConfig, triaged: ScoredIssue[], context?: RunContext[]): string;
1188
+ declare function buildTriagedWorkPrompt(
1189
+ config: JobConfig,
1190
+ triaged: ScoredIssue[],
1191
+ context?: RunContext[],
1192
+ ): string;
1037
1193
 
1038
1194
  /**
1039
1195
  * Build the list of allowed tools for Claude based on job config guardrails.
@@ -1060,78 +1216,218 @@ declare function spawnClaude(options: SpawnOptions): Promise<SpawnResult>;
1060
1216
  declare function launchDashboard(): Promise<void>;
1061
1217
 
1062
1218
  declare class ConfigParseError extends Error {
1063
- readonly filePath: string;
1064
- readonly parseErrors: Array<{
1065
- message: string;
1066
- }>;
1067
- name: "ConfigParseError";
1068
- constructor(filePath: string, parseErrors: Array<{
1069
- message: string;
1070
- }>);
1219
+ readonly filePath: string;
1220
+ readonly parseErrors: Array<{
1221
+ message: string;
1222
+ }>;
1223
+ name: "ConfigParseError";
1224
+ constructor(
1225
+ filePath: string,
1226
+ parseErrors: Array<{
1227
+ message: string;
1228
+ }>,
1229
+ );
1071
1230
  }
1072
1231
  declare class ConfigValidationError extends Error {
1073
- readonly filePath: string;
1074
- readonly validationMessage: string;
1075
- name: "ConfigValidationError";
1076
- constructor(filePath: string, validationMessage: string);
1232
+ readonly filePath: string;
1233
+ readonly validationMessage: string;
1234
+ name: "ConfigValidationError";
1235
+ constructor(filePath: string, validationMessage: string);
1077
1236
  }
1078
1237
  declare class SchedulerError extends Error {
1079
- readonly platform: string;
1080
- readonly cause?: Error | undefined;
1081
- name: "SchedulerError";
1082
- constructor(platform: string, message: string, cause?: Error | undefined);
1238
+ readonly platform: string;
1239
+ readonly cause?: Error | undefined;
1240
+ name: "SchedulerError";
1241
+ constructor(platform: string, message: string, cause?: Error | undefined);
1083
1242
  }
1084
1243
  declare class CronValidationError extends Error {
1085
- readonly expression: string;
1086
- name: "CronValidationError";
1087
- constructor(expression: string, message: string);
1244
+ readonly expression: string;
1245
+ name: "CronValidationError";
1246
+ constructor(expression: string, message: string);
1088
1247
  }
1089
1248
  declare class GitOpsError extends Error {
1090
- readonly operation: string;
1091
- readonly repoPath: string;
1092
- readonly cause?: Error | undefined;
1093
- name: "GitOpsError";
1094
- constructor(operation: string, repoPath: string, message: string, cause?: Error | undefined);
1249
+ readonly operation: string;
1250
+ readonly repoPath: string;
1251
+ readonly cause?: Error | undefined;
1252
+ name: "GitOpsError";
1253
+ constructor(operation: string, repoPath: string, message: string, cause?: Error | undefined);
1095
1254
  }
1096
1255
  declare class LockError extends Error {
1097
- readonly jobId: string;
1098
- name: "LockError";
1099
- constructor(jobId: string, message: string);
1256
+ readonly jobId: string;
1257
+ name: "LockError";
1258
+ constructor(jobId: string, message: string);
1100
1259
  }
1101
1260
  declare class SpawnError extends Error {
1102
- readonly exitCode?: number | undefined;
1103
- name: "SpawnError";
1104
- constructor(message: string, exitCode?: number | undefined);
1261
+ readonly exitCode?: number | undefined;
1262
+ name: "SpawnError";
1263
+ constructor(message: string, exitCode?: number | undefined);
1105
1264
  }
1106
1265
 
1107
1266
  interface ExecResult {
1108
- stdout: string;
1109
- stderr: string;
1267
+ stdout: string;
1268
+ stderr: string;
1110
1269
  }
1111
1270
  /**
1112
1271
  * Execute a command and return stdout/stderr.
1113
1272
  * Throws if the command exits with non-zero status.
1114
1273
  */
1115
- declare function execCommand(command: string, args: string[], options?: {
1116
- stdin?: string;
1117
- cwd?: string;
1118
- }): Promise<ExecResult>;
1274
+ declare function execCommand(
1275
+ command: string,
1276
+ args: string[],
1277
+ options?: {
1278
+ stdin?: string;
1279
+ cwd?: string;
1280
+ },
1281
+ ): Promise<ExecResult>;
1119
1282
 
1120
1283
  declare function writeFileSafe(filePath: string, content: string): Promise<void>;
1121
1284
 
1122
1285
  declare const paths: {
1123
- readonly base: string;
1124
- readonly jobs: string;
1125
- readonly jobDir: (jobId: string) => string;
1126
- readonly jobConfig: (jobId: string) => string;
1127
- readonly logs: string;
1128
- readonly jobLogs: (jobId: string) => string;
1129
- readonly jobLog: (jobId: string, runId: string) => string;
1130
- readonly jobLock: (jobId: string) => string;
1131
- readonly plistDir: string;
1132
- readonly plistPath: (jobId: string) => string;
1133
- readonly crontabLock: string;
1134
- readonly database: string;
1286
+ readonly base: string;
1287
+ readonly jobs: string;
1288
+ readonly jobDir: (jobId: string) => string;
1289
+ readonly jobConfig: (jobId: string) => string;
1290
+ readonly logs: string;
1291
+ readonly jobLogs: (jobId: string) => string;
1292
+ readonly jobLog: (jobId: string, runId: string) => string;
1293
+ readonly jobLock: (jobId: string) => string;
1294
+ readonly plistDir: string;
1295
+ readonly plistPath: (jobId: string) => string;
1296
+ readonly crontabLock: string;
1297
+ readonly database: string;
1135
1298
  };
1136
1299
 
1137
- export { type BudgetConfig, COMMANDS, type CalendarInterval, type CliCommand, type CommandHandler, ConfigParseError, ConfigValidationError, type CostSummaryRow, CronValidationError, CrontabScheduler, type DailyCostRow, type EventTriggers, GitOpsError, type JobConfig, JobConfigSchema, LaunchdScheduler, LockError, type NotificationEvent, type NotificationPayload, type PRFeedbackContext, type ParsedCommand, type PipelineResult, type PipelineStageResult, type Platform, type RebaseResult, type RegisteredJob, type ReviewThread, type RunContext, type RunLogEntry, type RunResult, type RunStatus, STALE_THRESHOLD, type ScheduleInfo, type Scheduler, SchedulerError, SchtasksScheduler, type ScoredIssue, SpawnError, type SpawnOptions, type SpawnResult, acquireLock, attemptRebase, buildAllowedTools, buildFeedbackPrompt, buildFixPrompt, buildFixSystemPrompt, buildImplementPrompt, buildImplementSystemPrompt, buildPayload, buildPlanPrompt, buildPlanSystemPrompt, buildReadOnlyTools, buildReviewPrompt, buildReviewSystemPrompt, buildSystemPrompt, buildTriagedWorkPrompt, buildWorkPrompt, checkBudget, checkDivergence, checkPendingPRFeedback, checkRepoCommand, checkoutExistingBranch, closeDatabase, costCommand, createBranch, createCommand, createJob, createPR, createScheduler, cronToCalendarIntervals, cronToSchtasks, deleteJob, describeSchedule, detectPlatform, editCommand, execCommand, executeRun, extractIssueNumber, formatContextWindow, formatDiscord, formatDuration, formatRelativeTime, formatSlack, formatTable, formatTelegram, getCostSummary, getDatabase, getDiffFromBase, getFeedbackRound, getNextRuns, getRepoOwnerName, getUnresolvedThreads, hasChanges, launchDashboard, listCommand, listJobs, listOpenPRsWithFeedback, listRunLogs, loadJobConfig, loadRunContext, logsCommand, parseCommand, parseReviewVerdict, paths, pauseCommand, postIssueComment, postPRComment, pullLatest, pushBranch, readConfigDocument, readJob, readRunLog, removeCommand, reportCommand, resumeCommand, runCli, runPipeline, saveJobConfig, saveRunContext, sendNotifications, shouldNotify, spawnClaude, statusBadge, triageIssues, updateConfigField, updateJob, validateAndDescribeSchedule, validateConfig, validateCronExpression, writeConfigDocument, writeFileSafe, writeRunLog };
1300
+ export {
1301
+ type BudgetConfig,
1302
+ COMMANDS,
1303
+ type CalendarInterval,
1304
+ type CliCommand,
1305
+ type CommandHandler,
1306
+ ConfigParseError,
1307
+ ConfigValidationError,
1308
+ type CostSummaryRow,
1309
+ CronValidationError,
1310
+ CrontabScheduler,
1311
+ type DailyCostRow,
1312
+ type EventTriggers,
1313
+ GitOpsError,
1314
+ type JobConfig,
1315
+ JobConfigSchema,
1316
+ LaunchdScheduler,
1317
+ LockError,
1318
+ type NotificationEvent,
1319
+ type NotificationPayload,
1320
+ type PRFeedbackContext,
1321
+ type ParsedCommand,
1322
+ type PipelineResult,
1323
+ type PipelineStageResult,
1324
+ type Platform,
1325
+ type RebaseResult,
1326
+ type RegisteredJob,
1327
+ type ReviewThread,
1328
+ type RunContext,
1329
+ type RunLogEntry,
1330
+ type RunResult,
1331
+ type RunStatus,
1332
+ STALE_THRESHOLD,
1333
+ type ScheduleInfo,
1334
+ type Scheduler,
1335
+ SchedulerError,
1336
+ SchtasksScheduler,
1337
+ type ScoredIssue,
1338
+ SpawnError,
1339
+ type SpawnOptions,
1340
+ type SpawnResult,
1341
+ acquireLock,
1342
+ attemptRebase,
1343
+ buildAllowedTools,
1344
+ buildFeedbackPrompt,
1345
+ buildFixPrompt,
1346
+ buildFixSystemPrompt,
1347
+ buildImplementPrompt,
1348
+ buildImplementSystemPrompt,
1349
+ buildPayload,
1350
+ buildPlanPrompt,
1351
+ buildPlanSystemPrompt,
1352
+ buildReadOnlyTools,
1353
+ buildReviewPrompt,
1354
+ buildReviewSystemPrompt,
1355
+ buildSystemPrompt,
1356
+ buildTriagedWorkPrompt,
1357
+ buildWorkPrompt,
1358
+ checkBudget,
1359
+ checkDivergence,
1360
+ checkPendingPRFeedback,
1361
+ checkRepoCommand,
1362
+ checkoutExistingBranch,
1363
+ closeDatabase,
1364
+ costCommand,
1365
+ createBranch,
1366
+ createCommand,
1367
+ createJob,
1368
+ createPR,
1369
+ createScheduler,
1370
+ cronToCalendarIntervals,
1371
+ cronToSchtasks,
1372
+ deleteJob,
1373
+ describeSchedule,
1374
+ detectPlatform,
1375
+ editCommand,
1376
+ execCommand,
1377
+ executeRun,
1378
+ extractIssueNumber,
1379
+ formatContextWindow,
1380
+ formatDiscord,
1381
+ formatDuration,
1382
+ formatRelativeTime,
1383
+ formatSlack,
1384
+ formatTable,
1385
+ formatTelegram,
1386
+ getCostSummary,
1387
+ getDatabase,
1388
+ getDiffFromBase,
1389
+ getFeedbackRound,
1390
+ getNextRuns,
1391
+ getRepoOwnerName,
1392
+ getUnresolvedThreads,
1393
+ hasChanges,
1394
+ launchDashboard,
1395
+ listCommand,
1396
+ listJobs,
1397
+ listOpenPRsWithFeedback,
1398
+ listRunLogs,
1399
+ loadJobConfig,
1400
+ loadRunContext,
1401
+ logsCommand,
1402
+ parseCommand,
1403
+ parseReviewVerdict,
1404
+ paths,
1405
+ pauseCommand,
1406
+ postIssueComment,
1407
+ postPRComment,
1408
+ pullLatest,
1409
+ pushBranch,
1410
+ readConfigDocument,
1411
+ readJob,
1412
+ readRunLog,
1413
+ removeCommand,
1414
+ reportCommand,
1415
+ resumeCommand,
1416
+ runCli,
1417
+ runPipeline,
1418
+ saveJobConfig,
1419
+ saveRunContext,
1420
+ sendNotifications,
1421
+ shouldNotify,
1422
+ spawnClaude,
1423
+ statusBadge,
1424
+ triageIssues,
1425
+ updateConfigField,
1426
+ updateJob,
1427
+ validateAndDescribeSchedule,
1428
+ validateConfig,
1429
+ validateCronExpression,
1430
+ writeConfigDocument,
1431
+ writeFileSafe,
1432
+ writeRunLog,
1433
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cjvana/claude-auto",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Autonomous Claude Code cron jobs for continuous codebase improvement",
5
5
  "type": "module",
6
6
  "engines": {