@praveencs/agent 0.2.0 → 0.7.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 (58) hide show
  1. package/README.md +42 -982
  2. package/dist/src/cli/commands/daemon.d.ts.map +1 -1
  3. package/dist/src/cli/commands/daemon.js +147 -7
  4. package/dist/src/cli/commands/daemon.js.map +1 -1
  5. package/dist/src/cli/commands/goal.d.ts.map +1 -1
  6. package/dist/src/cli/commands/goal.js +67 -0
  7. package/dist/src/cli/commands/goal.js.map +1 -1
  8. package/dist/src/cli/commands/report.d.ts +3 -0
  9. package/dist/src/cli/commands/report.d.ts.map +1 -0
  10. package/dist/src/cli/commands/report.js +34 -0
  11. package/dist/src/cli/commands/report.js.map +1 -0
  12. package/dist/src/cli/commands/skills.d.ts.map +1 -1
  13. package/dist/src/cli/commands/skills.js +100 -0
  14. package/dist/src/cli/commands/skills.js.map +1 -1
  15. package/dist/src/cli/index.d.ts.map +1 -1
  16. package/dist/src/cli/index.js +3 -1
  17. package/dist/src/cli/index.js.map +1 -1
  18. package/dist/src/daemon/manager.d.ts +9 -3
  19. package/dist/src/daemon/manager.d.ts.map +1 -1
  20. package/dist/src/daemon/manager.js +31 -10
  21. package/dist/src/daemon/manager.js.map +1 -1
  22. package/dist/src/daemon/service.d.ts +76 -0
  23. package/dist/src/daemon/service.d.ts.map +1 -0
  24. package/dist/src/daemon/service.js +284 -0
  25. package/dist/src/daemon/service.js.map +1 -0
  26. package/dist/src/daemon/triggers.d.ts +34 -0
  27. package/dist/src/daemon/triggers.d.ts.map +1 -0
  28. package/dist/src/daemon/triggers.js +76 -0
  29. package/dist/src/daemon/triggers.js.map +1 -0
  30. package/dist/src/goals/decomposer.d.ts +41 -0
  31. package/dist/src/goals/decomposer.d.ts.map +1 -0
  32. package/dist/src/goals/decomposer.js +167 -0
  33. package/dist/src/goals/decomposer.js.map +1 -0
  34. package/dist/src/goals/executor.d.ts +52 -0
  35. package/dist/src/goals/executor.d.ts.map +1 -0
  36. package/dist/src/goals/executor.js +198 -0
  37. package/dist/src/goals/executor.js.map +1 -0
  38. package/dist/src/goals/store.d.ts +4 -0
  39. package/dist/src/goals/store.d.ts.map +1 -1
  40. package/dist/src/goals/store.js +13 -0
  41. package/dist/src/goals/store.js.map +1 -1
  42. package/dist/src/memory/store.d.ts +12 -0
  43. package/dist/src/memory/store.d.ts.map +1 -1
  44. package/dist/src/memory/store.js +57 -1
  45. package/dist/src/memory/store.js.map +1 -1
  46. package/dist/src/reporting/generator.d.ts +14 -0
  47. package/dist/src/reporting/generator.d.ts.map +1 -0
  48. package/dist/src/reporting/generator.js +91 -0
  49. package/dist/src/reporting/generator.js.map +1 -0
  50. package/dist/src/skills/doctor.d.ts +30 -0
  51. package/dist/src/skills/doctor.d.ts.map +1 -0
  52. package/dist/src/skills/doctor.js +108 -0
  53. package/dist/src/skills/doctor.js.map +1 -0
  54. package/dist/src/skills/loader.d.ts +4 -0
  55. package/dist/src/skills/loader.d.ts.map +1 -1
  56. package/dist/src/skills/loader.js +13 -0
  57. package/dist/src/skills/loader.js.map +1 -1
  58. package/package.json +1 -1
@@ -9,6 +9,7 @@ import { createDoctorCommand } from './commands/doctor.js';
9
9
  import { createConfigCommand } from './commands/config.js';
10
10
  import { createMemoryCommand } from './commands/memory.js';
11
11
  import { createGoalCommand, createApproveCommand } from './commands/goal.js';
12
+ import { createReportCommand } from './commands/report.js';
12
13
  /**
13
14
  * Create the CLI program with all commands
14
15
  */
@@ -17,7 +18,7 @@ export function createCLI() {
17
18
  program
18
19
  .name('agent')
19
20
  .description('Agent Runtime — autonomous, goal-oriented AI agent with skills, plans, memory, and permissioned tools')
20
- .version('0.2.0')
21
+ .version('0.7.0')
21
22
  .option('--verbose', 'Enable verbose output')
22
23
  .option('--no-color', 'Disable colored output')
23
24
  .option('--config <path>', 'Path to config file');
@@ -33,6 +34,7 @@ export function createCLI() {
33
34
  program.addCommand(createMemoryCommand());
34
35
  program.addCommand(createGoalCommand());
35
36
  program.addCommand(createApproveCommand());
37
+ program.addCommand(createReportCommand());
36
38
  return program;
37
39
  }
38
40
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE7E;;GAEG;AACH,MAAM,UAAU,SAAS;IACrB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACF,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,uGAAuG,CAAC;SACpH,OAAO,CAAC,OAAO,CAAC;SAChB,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC;SAC5C,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;SAC9C,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;IAEtD,wBAAwB;IACxB,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAE3C,OAAO,OAAO,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;GAEG;AACH,MAAM,UAAU,SAAS;IACrB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACF,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,uGAAuG,CAAC;SACpH,OAAO,CAAC,OAAO,CAAC;SAChB,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC;SAC5C,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;SAC9C,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;IAEtD,wBAAwB;IACxB,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAE1C,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -3,16 +3,17 @@
3
3
  */
4
4
  export declare class DaemonManager {
5
5
  private pidFile;
6
- constructor(pidFile?: string);
6
+ private logFile;
7
+ constructor();
7
8
  /**
8
- * Start the daemon
9
+ * Start the daemon as a detached background process
9
10
  */
10
11
  start(): Promise<{
11
12
  pid: number;
12
13
  message: string;
13
14
  }>;
14
15
  /**
15
- * Stop the daemon
16
+ * Stop the daemon gracefully
16
17
  */
17
18
  stop(): Promise<{
18
19
  message: string;
@@ -23,6 +24,11 @@ export declare class DaemonManager {
23
24
  status(): Promise<{
24
25
  running: boolean;
25
26
  pid?: number;
27
+ uptime?: string;
26
28
  }>;
29
+ /**
30
+ * Get recent daemon log lines
31
+ */
32
+ getLogs(lines?: number): Promise<string[]>;
27
33
  }
28
34
  //# sourceMappingURL=manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/daemon/manager.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,CAAC,EAAE,MAAM;IAI5B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA0BxD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAiB1C;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAoB9D"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/daemon/manager.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;;IAOxB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAoCxD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAe1C;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAoBF;;OAEG;IACG,OAAO,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAS/C"}
@@ -1,4 +1,4 @@
1
- import { readFile, writeFile, access } from 'node:fs/promises';
1
+ import { readFile, writeFile, access, unlink, mkdir } from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { fork } from 'node:child_process';
4
4
  import { getAgentDir } from '../utils/paths.js';
@@ -7,11 +7,13 @@ import { getAgentDir } from '../utils/paths.js';
7
7
  */
8
8
  export class DaemonManager {
9
9
  pidFile;
10
- constructor(pidFile) {
11
- this.pidFile = pidFile ?? path.join(getAgentDir(), 'daemon.pid');
10
+ logFile;
11
+ constructor() {
12
+ this.pidFile = path.join(getAgentDir(), 'daemon.pid');
13
+ this.logFile = path.join(getAgentDir(), 'daemon.log');
12
14
  }
13
15
  /**
14
- * Start the daemon
16
+ * Start the daemon as a detached background process
15
17
  */
16
18
  async start() {
17
19
  // Check if already running
@@ -19,11 +21,20 @@ export class DaemonManager {
19
21
  if (existing.running) {
20
22
  return { pid: existing.pid, message: `Daemon already running (PID: ${existing.pid})` };
21
23
  }
24
+ // Ensure .agent dir exists
25
+ await mkdir(path.dirname(this.pidFile), { recursive: true });
26
+ // Resolve to the compiled service.js
27
+ const daemonScript = path.resolve(path.dirname(new URL(import.meta.url).pathname), 'service.js');
22
28
  // Fork the daemon process
23
- const daemonScript = path.resolve(path.dirname(new URL(import.meta.url).pathname), 'scheduler.js');
24
29
  const child = fork(daemonScript, [], {
25
30
  detached: true,
26
31
  stdio: 'ignore',
32
+ cwd: process.cwd(),
33
+ env: {
34
+ ...process.env,
35
+ AGENT_DAEMON: '1',
36
+ AGENT_WORK_DIR: process.cwd(),
37
+ },
27
38
  });
28
39
  child.unref();
29
40
  const pid = child.pid;
@@ -31,7 +42,7 @@ export class DaemonManager {
31
42
  return { pid, message: `Daemon started (PID: ${pid})` };
32
43
  }
33
44
  /**
34
- * Stop the daemon
45
+ * Stop the daemon gracefully
35
46
  */
36
47
  async stop() {
37
48
  const status = await this.status();
@@ -40,8 +51,6 @@ export class DaemonManager {
40
51
  }
41
52
  try {
42
53
  process.kill(status.pid, 'SIGTERM');
43
- // Clean up PID file
44
- const { unlink } = await import('node:fs/promises');
45
54
  await unlink(this.pidFile).catch(() => { });
46
55
  return { message: `Daemon stopped (PID: ${status.pid})` };
47
56
  }
@@ -63,8 +72,7 @@ export class DaemonManager {
63
72
  return { running: true, pid };
64
73
  }
65
74
  catch {
66
- // PID file exists but process is dead
67
- const { unlink } = await import('node:fs/promises');
75
+ // PID file exists but process is dead — clean up
68
76
  await unlink(this.pidFile).catch(() => { });
69
77
  return { running: false };
70
78
  }
@@ -73,5 +81,18 @@ export class DaemonManager {
73
81
  return { running: false };
74
82
  }
75
83
  }
84
+ /**
85
+ * Get recent daemon log lines
86
+ */
87
+ async getLogs(lines = 30) {
88
+ try {
89
+ const content = await readFile(this.logFile, 'utf-8');
90
+ const allLines = content.split('\n').filter(l => l.trim());
91
+ return allLines.slice(-lines);
92
+ }
93
+ catch {
94
+ return ['No daemon logs found.'];
95
+ }
96
+ }
76
97
  }
77
98
  //# sourceMappingURL=manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/daemon/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/daemon/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Daemon Service — The autonomous agent heartbeat
3
+ *
4
+ * Runs as a long-lived background process that:
5
+ * - Processes the goal/task queue
6
+ * - Watches files for changes
7
+ * - Runs cron-scheduled tasks
8
+ * - Logs all activity
9
+ */
10
+ export declare class DaemonService {
11
+ private workDir;
12
+ private cronJobs;
13
+ private fileWatchers;
14
+ private heartbeatTimer;
15
+ private memoryStore;
16
+ private goalStore;
17
+ private logPath;
18
+ private running;
19
+ private startedAt;
20
+ private stats;
21
+ constructor(workDir?: string);
22
+ /**
23
+ * Start the daemon service
24
+ */
25
+ start(): Promise<void>;
26
+ /**
27
+ * Register a trigger
28
+ */
29
+ private registerTrigger;
30
+ /**
31
+ * Handle a trigger firing
32
+ */
33
+ private onTriggerFired;
34
+ /**
35
+ * Process the goal/task queue
36
+ */
37
+ private processGoalQueue;
38
+ /**
39
+ * Execute a single task
40
+ */
41
+ private executeTask;
42
+ /**
43
+ * Heartbeat — periodic health check
44
+ */
45
+ private heartbeat;
46
+ /**
47
+ * Graceful shutdown
48
+ */
49
+ private shutdown;
50
+ /**
51
+ * Get daemon uptime as human-readable string
52
+ */
53
+ private getUptime;
54
+ /**
55
+ * Get current daemon status
56
+ */
57
+ getStatus(): {
58
+ running: boolean;
59
+ startedAt: string | null;
60
+ uptime: string;
61
+ stats: {
62
+ tasksProcessed: number;
63
+ tasksCompleted: number;
64
+ tasksFailed: number;
65
+ triggersFireCount: number;
66
+ heartbeats: number;
67
+ };
68
+ cronJobs: number;
69
+ fileWatchers: number;
70
+ };
71
+ /**
72
+ * Log a message to the daemon log file
73
+ */
74
+ private log;
75
+ }
76
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/daemon/service.ts"],"names":[],"mappings":"AASA;;;;;;;;GAQG;AACH,qBAAa,aAAa;IAiBV,OAAO,CAAC,OAAO;IAhB3B,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,KAAK,CAMX;gBAEkB,OAAO,GAAE,MAAsB;IAMnD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B5B;;OAEG;YACW,eAAe;IA8C7B;;OAEG;YACW,cAAc;IAiC5B;;OAEG;YACW,gBAAgB;IAoC9B;;OAEG;YACW,WAAW;IAWzB;;OAEG;YACW,SAAS;IAoBvB;;OAEG;YACW,QAAQ;IA+BtB;;OAEG;IACH,OAAO,CAAC,SAAS;IAgBjB;;OAEG;IACH,SAAS;;;;;;;;;;;;;;IAWT;;OAEG;YACW,GAAG;CAWpB"}
@@ -0,0 +1,284 @@
1
+ import { Cron } from 'croner';
2
+ import { watch } from 'chokidar';
3
+ import path from 'node:path';
4
+ import { appendFile, mkdir } from 'node:fs/promises';
5
+ import { MemoryStore } from '../memory/store.js';
6
+ import { GoalStore } from '../goals/store.js';
7
+ import { loadTriggers } from './triggers.js';
8
+ import { getAgentDir } from '../utils/paths.js';
9
+ /**
10
+ * Daemon Service — The autonomous agent heartbeat
11
+ *
12
+ * Runs as a long-lived background process that:
13
+ * - Processes the goal/task queue
14
+ * - Watches files for changes
15
+ * - Runs cron-scheduled tasks
16
+ * - Logs all activity
17
+ */
18
+ export class DaemonService {
19
+ workDir;
20
+ cronJobs = [];
21
+ fileWatchers = [];
22
+ heartbeatTimer = null;
23
+ memoryStore;
24
+ goalStore;
25
+ logPath;
26
+ running = false;
27
+ startedAt = null;
28
+ stats = {
29
+ tasksProcessed: 0,
30
+ tasksCompleted: 0,
31
+ tasksFailed: 0,
32
+ triggersFireCount: 0,
33
+ heartbeats: 0,
34
+ };
35
+ constructor(workDir = process.cwd()) {
36
+ this.workDir = workDir;
37
+ this.memoryStore = MemoryStore.open(workDir);
38
+ this.goalStore = new GoalStore(this.memoryStore);
39
+ this.logPath = path.join(getAgentDir(), 'daemon.log');
40
+ }
41
+ /**
42
+ * Start the daemon service
43
+ */
44
+ async start() {
45
+ if (this.running)
46
+ return;
47
+ this.running = true;
48
+ this.startedAt = new Date();
49
+ await this.log('🟢 Agent daemon started');
50
+ await this.log(` Working directory: ${this.workDir}`);
51
+ // Load and register triggers
52
+ const triggers = await loadTriggers(this.workDir);
53
+ await this.log(` Loaded ${triggers.length} trigger(s)`);
54
+ for (const trigger of triggers) {
55
+ await this.registerTrigger(trigger);
56
+ }
57
+ // Start heartbeat (every 60 seconds)
58
+ this.heartbeatTimer = setInterval(() => this.heartbeat(), 60_000);
59
+ // Run initial goal check
60
+ await this.processGoalQueue();
61
+ // Keep the process alive
62
+ process.on('SIGTERM', () => this.shutdown());
63
+ process.on('SIGINT', () => this.shutdown());
64
+ await this.log(' Daemon is ready. Waiting for events...');
65
+ }
66
+ /**
67
+ * Register a trigger
68
+ */
69
+ async registerTrigger(trigger) {
70
+ switch (trigger.event) {
71
+ case 'cron':
72
+ case 'goal.check':
73
+ if (trigger.schedule) {
74
+ const job = new Cron(trigger.schedule, async () => {
75
+ await this.onTriggerFired(trigger);
76
+ });
77
+ this.cronJobs.push(job);
78
+ await this.log(` 📅 Cron registered: "${trigger.name}" → ${trigger.schedule}`);
79
+ }
80
+ break;
81
+ case 'file.changed':
82
+ if (trigger.watch) {
83
+ const paths = Array.isArray(trigger.watch) ? trigger.watch : [trigger.watch];
84
+ const watcher = watch(paths, {
85
+ cwd: this.workDir,
86
+ ignoreInitial: true,
87
+ awaitWriteFinish: {
88
+ stabilityThreshold: trigger.debounce ?? 2000,
89
+ },
90
+ });
91
+ let debounceTimer = null;
92
+ const handleChange = (filePath) => {
93
+ if (debounceTimer)
94
+ clearTimeout(debounceTimer);
95
+ debounceTimer = setTimeout(async () => {
96
+ await this.onTriggerFired(trigger, { changedFile: filePath });
97
+ }, trigger.debounce ?? 2000);
98
+ };
99
+ watcher.on('change', handleChange);
100
+ watcher.on('add', handleChange);
101
+ this.fileWatchers.push(watcher);
102
+ await this.log(` 👁️ Watcher registered: "${trigger.name}" → ${paths.join(', ')}`);
103
+ }
104
+ break;
105
+ default:
106
+ await this.log(` ⚠️ Unknown trigger event: ${trigger.event}`);
107
+ }
108
+ }
109
+ /**
110
+ * Handle a trigger firing
111
+ */
112
+ async onTriggerFired(trigger, _context) {
113
+ this.stats.triggersFireCount++;
114
+ if (trigger.action.type === 'goal-progress') {
115
+ await this.processGoalQueue();
116
+ return;
117
+ }
118
+ if (trigger.action.skill) {
119
+ await this.log(`⚡ Trigger "${trigger.name}" fired → skill: ${trigger.action.skill}`);
120
+ // In a full implementation, this would invoke the skill runner
121
+ // For now, log the trigger and create a task if there's an active goal
122
+ await this.log(` Skill execution: ${trigger.action.skill} (queued)`);
123
+ }
124
+ if (trigger.action.run) {
125
+ await this.log(`⚡ Trigger "${trigger.name}" fired → run: ${trigger.action.run}`);
126
+ try {
127
+ const { exec } = await import('node:child_process');
128
+ const { promisify } = await import('node:util');
129
+ const execAsync = promisify(exec);
130
+ const { stdout, stderr } = await execAsync(trigger.action.run, {
131
+ cwd: this.workDir,
132
+ timeout: 30_000,
133
+ });
134
+ if (stdout)
135
+ await this.log(` stdout: ${stdout.trim()}`);
136
+ if (stderr)
137
+ await this.log(` stderr: ${stderr.trim()}`);
138
+ }
139
+ catch (err) {
140
+ await this.log(` ✗ Command failed: ${err.message}`);
141
+ }
142
+ }
143
+ }
144
+ /**
145
+ * Process the goal/task queue
146
+ */
147
+ async processGoalQueue() {
148
+ const task = this.goalStore.getNextTask();
149
+ if (!task)
150
+ return;
151
+ this.stats.tasksProcessed++;
152
+ await this.log(`🔄 Processing task #${task.id}: "${task.title}"`);
153
+ this.goalStore.startTask(task.id);
154
+ try {
155
+ // Execute the task
156
+ const result = await this.executeTask(task);
157
+ this.goalStore.completeTask(task.id, result);
158
+ this.stats.tasksCompleted++;
159
+ await this.log(`✅ Task #${task.id} completed: ${result.slice(0, 100)}`);
160
+ // Auto-save completion as a memory
161
+ this.memoryStore.save(`Completed task: "${task.title}" — ${result.slice(0, 200)}`, 'learned', 'agent', ['task', 'completed']);
162
+ // Check if there are more tasks to process
163
+ await this.processGoalQueue();
164
+ }
165
+ catch (err) {
166
+ const error = err.message;
167
+ this.goalStore.failTask(task.id, error);
168
+ this.stats.tasksFailed++;
169
+ await this.log(`❌ Task #${task.id} failed: ${error}`);
170
+ }
171
+ }
172
+ /**
173
+ * Execute a single task
174
+ */
175
+ async executeTask(task) {
176
+ if (task.skill) {
177
+ // In full implementation, this invokes the skill runner with the LLM
178
+ // For now, use shell execution for skills that have runnable commands
179
+ return `Task "${task.title}" processed (skill: ${task.skill})`;
180
+ }
181
+ // If no skill, treat as a simple logged action
182
+ return `Task "${task.title}" processed`;
183
+ }
184
+ /**
185
+ * Heartbeat — periodic health check
186
+ */
187
+ async heartbeat() {
188
+ if (!this.running)
189
+ return;
190
+ this.stats.heartbeats++;
191
+ // Check for pending approvals
192
+ const approvals = this.goalStore.getPendingApprovals();
193
+ if (approvals.length > 0) {
194
+ await this.log(`💡 ${approvals.length} task(s) awaiting approval`);
195
+ }
196
+ // Check for active goals
197
+ const goalStats = this.goalStore.stats();
198
+ if (goalStats.runningTasks > 0 || goalStats.pendingTasks > 0) {
199
+ await this.log(`📊 Heartbeat: ${goalStats.activeGoals} goals, ` +
200
+ `${goalStats.pendingTasks} pending, ${goalStats.runningTasks} running`);
201
+ }
202
+ }
203
+ /**
204
+ * Graceful shutdown
205
+ */
206
+ async shutdown() {
207
+ await this.log('🔴 Daemon shutting down...');
208
+ this.running = false;
209
+ // Stop heartbeat
210
+ if (this.heartbeatTimer) {
211
+ clearInterval(this.heartbeatTimer);
212
+ }
213
+ // Stop cron jobs
214
+ for (const job of this.cronJobs) {
215
+ job.stop();
216
+ }
217
+ // Stop file watchers
218
+ for (const watcher of this.fileWatchers) {
219
+ await watcher.close();
220
+ }
221
+ const uptime = this.getUptime();
222
+ await this.log(` Uptime: ${uptime} | ` +
223
+ `Tasks: ${this.stats.tasksProcessed} processed, ` +
224
+ `${this.stats.tasksCompleted} completed, ` +
225
+ `${this.stats.tasksFailed} failed`);
226
+ await this.log(' Goodbye.\n');
227
+ process.exit(0);
228
+ }
229
+ /**
230
+ * Get daemon uptime as human-readable string
231
+ */
232
+ getUptime() {
233
+ if (!this.startedAt)
234
+ return '0s';
235
+ const ms = Date.now() - this.startedAt.getTime();
236
+ const seconds = Math.floor(ms / 1000) % 60;
237
+ const minutes = Math.floor(ms / 60000) % 60;
238
+ const hours = Math.floor(ms / 3600000) % 24;
239
+ const days = Math.floor(ms / 86400000);
240
+ const parts = [];
241
+ if (days > 0)
242
+ parts.push(`${days}d`);
243
+ if (hours > 0)
244
+ parts.push(`${hours}h`);
245
+ if (minutes > 0)
246
+ parts.push(`${minutes}m`);
247
+ parts.push(`${seconds}s`);
248
+ return parts.join(' ');
249
+ }
250
+ /**
251
+ * Get current daemon status
252
+ */
253
+ getStatus() {
254
+ return {
255
+ running: this.running,
256
+ startedAt: this.startedAt?.toISOString() ?? null,
257
+ uptime: this.getUptime(),
258
+ stats: { ...this.stats },
259
+ cronJobs: this.cronJobs.length,
260
+ fileWatchers: this.fileWatchers.length,
261
+ };
262
+ }
263
+ /**
264
+ * Log a message to the daemon log file
265
+ */
266
+ async log(message) {
267
+ const timestamp = new Date().toISOString();
268
+ const line = `[${timestamp}] ${message}\n`;
269
+ // Ensure log directory exists
270
+ await mkdir(path.dirname(this.logPath), { recursive: true });
271
+ await appendFile(this.logPath, line, 'utf-8');
272
+ // Also print to stdout (visible in daemon logs)
273
+ console.log(`${timestamp.slice(11, 19)} ${message}`);
274
+ }
275
+ }
276
+ // Auto-start if run as the daemon process
277
+ if (process.argv[1]?.endsWith('service.js')) {
278
+ const service = new DaemonService();
279
+ service.start().catch(err => {
280
+ console.error('Fatal daemon error:', err);
281
+ process.exit(1);
282
+ });
283
+ }
284
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/daemon/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Trigger types supported by the daemon
3
+ */
4
+ export interface TriggerConfig {
5
+ name: string;
6
+ enabled: boolean;
7
+ event: 'file.changed' | 'cron' | 'webhook' | 'git.push' | 'goal.check';
8
+ watch?: string | string[];
9
+ debounce?: number;
10
+ schedule?: string;
11
+ path?: string;
12
+ secret?: string;
13
+ branch?: string;
14
+ action: {
15
+ skill?: string;
16
+ run?: string;
17
+ type?: string;
18
+ input?: Record<string, any>;
19
+ report?: boolean;
20
+ block?: boolean;
21
+ };
22
+ }
23
+ export interface TriggersFile {
24
+ triggers: TriggerConfig[];
25
+ }
26
+ /**
27
+ * Load triggers from .agent/triggers.yaml
28
+ */
29
+ export declare function loadTriggers(workDir?: string): Promise<TriggerConfig[]>;
30
+ /**
31
+ * Get the default triggers template
32
+ */
33
+ export declare function getDefaultTriggersYaml(): string;
34
+ //# sourceMappingURL=triggers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triggers.d.ts","sourceRoot":"","sources":["../../../src/daemon/triggers.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;IAEvE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,MAAM,EAAE;QACJ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACL;AAED,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAsB7E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CA4C/C"}