dot-agents 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 (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +238 -0
  3. package/dist/cli/commands/daemon.d.ts +3 -0
  4. package/dist/cli/commands/daemon.d.ts.map +1 -0
  5. package/dist/cli/commands/daemon.js +179 -0
  6. package/dist/cli/commands/daemon.js.map +1 -0
  7. package/dist/cli/commands/index.d.ts +6 -0
  8. package/dist/cli/commands/index.d.ts.map +1 -0
  9. package/dist/cli/commands/index.js +6 -0
  10. package/dist/cli/commands/index.js.map +1 -0
  11. package/dist/cli/commands/list.d.ts +3 -0
  12. package/dist/cli/commands/list.d.ts.map +1 -0
  13. package/dist/cli/commands/list.js +100 -0
  14. package/dist/cli/commands/list.js.map +1 -0
  15. package/dist/cli/commands/run.d.ts +3 -0
  16. package/dist/cli/commands/run.d.ts.map +1 -0
  17. package/dist/cli/commands/run.js +107 -0
  18. package/dist/cli/commands/run.js.map +1 -0
  19. package/dist/cli/commands/schedule.d.ts +3 -0
  20. package/dist/cli/commands/schedule.d.ts.map +1 -0
  21. package/dist/cli/commands/schedule.js +172 -0
  22. package/dist/cli/commands/schedule.js.map +1 -0
  23. package/dist/cli/commands/show.d.ts +3 -0
  24. package/dist/cli/commands/show.d.ts.map +1 -0
  25. package/dist/cli/commands/show.js +122 -0
  26. package/dist/cli/commands/show.js.map +1 -0
  27. package/dist/cli/index.d.ts +3 -0
  28. package/dist/cli/index.d.ts.map +1 -0
  29. package/dist/cli/index.js +38 -0
  30. package/dist/cli/index.js.map +1 -0
  31. package/dist/cli/lib/index.d.ts +2 -0
  32. package/dist/cli/lib/index.d.ts.map +1 -0
  33. package/dist/cli/lib/index.js +2 -0
  34. package/dist/cli/lib/index.js.map +1 -0
  35. package/dist/cli/lib/runner.d.ts +41 -0
  36. package/dist/cli/lib/runner.d.ts.map +1 -0
  37. package/dist/cli/lib/runner.js +179 -0
  38. package/dist/cli/lib/runner.js.map +1 -0
  39. package/dist/daemon/api/index.d.ts +2 -0
  40. package/dist/daemon/api/index.d.ts.map +1 -0
  41. package/dist/daemon/api/index.js +2 -0
  42. package/dist/daemon/api/index.js.map +1 -0
  43. package/dist/daemon/api/server.d.ts +12 -0
  44. package/dist/daemon/api/server.d.ts.map +1 -0
  45. package/dist/daemon/api/server.js +111 -0
  46. package/dist/daemon/api/server.js.map +1 -0
  47. package/dist/daemon/daemon.d.ts +95 -0
  48. package/dist/daemon/daemon.d.ts.map +1 -0
  49. package/dist/daemon/daemon.js +265 -0
  50. package/dist/daemon/daemon.js.map +1 -0
  51. package/dist/daemon/index.d.ts +4 -0
  52. package/dist/daemon/index.d.ts.map +1 -0
  53. package/dist/daemon/index.js +4 -0
  54. package/dist/daemon/index.js.map +1 -0
  55. package/dist/daemon/lib/executor.d.ts +17 -0
  56. package/dist/daemon/lib/executor.d.ts.map +1 -0
  57. package/dist/daemon/lib/executor.js +169 -0
  58. package/dist/daemon/lib/executor.js.map +1 -0
  59. package/dist/daemon/lib/index.d.ts +4 -0
  60. package/dist/daemon/lib/index.d.ts.map +1 -0
  61. package/dist/daemon/lib/index.js +4 -0
  62. package/dist/daemon/lib/index.js.map +1 -0
  63. package/dist/daemon/lib/scheduler.d.ts +90 -0
  64. package/dist/daemon/lib/scheduler.d.ts.map +1 -0
  65. package/dist/daemon/lib/scheduler.js +176 -0
  66. package/dist/daemon/lib/scheduler.js.map +1 -0
  67. package/dist/daemon/lib/watcher.d.ts +48 -0
  68. package/dist/daemon/lib/watcher.d.ts.map +1 -0
  69. package/dist/daemon/lib/watcher.js +77 -0
  70. package/dist/daemon/lib/watcher.js.map +1 -0
  71. package/dist/lib/config.d.ts +14 -0
  72. package/dist/lib/config.d.ts.map +1 -0
  73. package/dist/lib/config.js +76 -0
  74. package/dist/lib/config.js.map +1 -0
  75. package/dist/lib/frontmatter.d.ts +18 -0
  76. package/dist/lib/frontmatter.d.ts.map +1 -0
  77. package/dist/lib/frontmatter.js +26 -0
  78. package/dist/lib/frontmatter.js.map +1 -0
  79. package/dist/lib/index.d.ts +7 -0
  80. package/dist/lib/index.d.ts.map +1 -0
  81. package/dist/lib/index.js +9 -0
  82. package/dist/lib/index.js.map +1 -0
  83. package/dist/lib/persona.d.ts +32 -0
  84. package/dist/lib/persona.d.ts.map +1 -0
  85. package/dist/lib/persona.js +177 -0
  86. package/dist/lib/persona.js.map +1 -0
  87. package/dist/lib/types/index.d.ts +69 -0
  88. package/dist/lib/types/index.d.ts.map +1 -0
  89. package/dist/lib/types/index.js +4 -0
  90. package/dist/lib/types/index.js.map +1 -0
  91. package/dist/lib/types/persona.d.ts +46 -0
  92. package/dist/lib/types/persona.d.ts.map +1 -0
  93. package/dist/lib/types/persona.js +2 -0
  94. package/dist/lib/types/persona.js.map +1 -0
  95. package/dist/lib/types/triggers.d.ts +96 -0
  96. package/dist/lib/types/triggers.d.ts.map +1 -0
  97. package/dist/lib/types/triggers.js +2 -0
  98. package/dist/lib/types/triggers.js.map +1 -0
  99. package/dist/lib/types/workflow.d.ts +75 -0
  100. package/dist/lib/types/workflow.d.ts.map +1 -0
  101. package/dist/lib/types/workflow.js +2 -0
  102. package/dist/lib/types/workflow.js.map +1 -0
  103. package/dist/lib/variables.d.ts +28 -0
  104. package/dist/lib/variables.d.ts.map +1 -0
  105. package/dist/lib/variables.js +113 -0
  106. package/dist/lib/variables.js.map +1 -0
  107. package/dist/lib/workflow.d.ts +29 -0
  108. package/dist/lib/workflow.d.ts.map +1 -0
  109. package/dist/lib/workflow.js +155 -0
  110. package/dist/lib/workflow.js.map +1 -0
  111. package/package.json +71 -0
@@ -0,0 +1,265 @@
1
+ import { readdir } from "node:fs/promises";
2
+ import { requireConfig, listWorkflows, loadWorkflow, listPersonas, loadPersona, } from "../lib/index.js";
3
+ import { Scheduler } from "./lib/scheduler.js";
4
+ import { Executor } from "./lib/executor.js";
5
+ import { Watcher } from "./lib/watcher.js";
6
+ import { createApiServer, startApiServer } from "./api/server.js";
7
+ /**
8
+ * Main daemon class
9
+ */
10
+ export class Daemon {
11
+ config = null;
12
+ scheduler;
13
+ executor = null;
14
+ watcher = null;
15
+ apiServer = null;
16
+ app = null;
17
+ startTime = null;
18
+ running = false;
19
+ port;
20
+ watchEnabled;
21
+ constructor(options = {}) {
22
+ this.port = options.port ?? 3141;
23
+ this.watchEnabled = options.watch ?? true;
24
+ this.scheduler = new Scheduler();
25
+ if (options.config) {
26
+ this.config = options.config;
27
+ }
28
+ // Wire up scheduler events
29
+ this.scheduler.on("job:trigger", async ({ job, workflow }) => {
30
+ console.log(`[trigger] ${workflow.name} (${job.cron})`);
31
+ try {
32
+ const result = await this.executor.run(workflow, job.inputs);
33
+ this.scheduler.updateJobStatus(job.id, result.success);
34
+ console.log(`[complete] ${workflow.name}: ${result.success ? "success" : "failure"} (${result.duration}ms)`);
35
+ }
36
+ catch (error) {
37
+ this.scheduler.updateJobStatus(job.id, false);
38
+ console.error(`[error] ${workflow.name}: ${error.message}`);
39
+ }
40
+ });
41
+ }
42
+ /**
43
+ * Start the daemon
44
+ */
45
+ async start() {
46
+ if (this.running)
47
+ return;
48
+ console.log("[daemon] Starting...");
49
+ // Load config if not provided
50
+ if (!this.config) {
51
+ this.config = await requireConfig();
52
+ }
53
+ this.executor = new Executor(this.config);
54
+ this.startTime = new Date();
55
+ // Load and schedule workflows
56
+ await this.loadWorkflows();
57
+ // Start scheduler
58
+ this.scheduler.start();
59
+ console.log(`[scheduler] Started with ${this.scheduler.getJobCount()} jobs`);
60
+ // Start file watcher
61
+ if (this.watchEnabled) {
62
+ this.watcher = new Watcher(this.config.workflowsDir, this.config.personasDir);
63
+ this.setupWatcherEvents();
64
+ this.watcher.start();
65
+ console.log("[watcher] Watching for file changes");
66
+ }
67
+ // Start API server
68
+ this.app = createApiServer(this);
69
+ this.apiServer = await startApiServer(this.app, this.port);
70
+ console.log(`[api] Listening on http://localhost:${this.port}`);
71
+ this.running = true;
72
+ console.log("[daemon] Ready");
73
+ }
74
+ /**
75
+ * Stop the daemon
76
+ */
77
+ async stop() {
78
+ if (!this.running)
79
+ return;
80
+ console.log("[daemon] Stopping...");
81
+ // Stop scheduler
82
+ this.scheduler.stop();
83
+ // Stop watcher
84
+ if (this.watcher) {
85
+ await this.watcher.stop();
86
+ }
87
+ // Stop API server
88
+ if (this.apiServer) {
89
+ await new Promise((resolve) => {
90
+ this.apiServer.close(() => resolve());
91
+ });
92
+ }
93
+ this.running = false;
94
+ console.log("[daemon] Stopped");
95
+ }
96
+ /**
97
+ * Load all workflows and add to scheduler
98
+ */
99
+ async loadWorkflows() {
100
+ const workflowPaths = await listWorkflows(this.config.workflowsDir);
101
+ for (const path of workflowPaths) {
102
+ try {
103
+ const workflow = await loadWorkflow(path);
104
+ this.scheduler.addWorkflow(workflow);
105
+ console.log(`[loaded] ${workflow.name}`);
106
+ }
107
+ catch (error) {
108
+ console.error(`[error] Failed to load workflow at ${path}: ${error.message}`);
109
+ }
110
+ }
111
+ }
112
+ /**
113
+ * Reload all workflows
114
+ */
115
+ async reloadWorkflows() {
116
+ console.log("[reload] Reloading workflows...");
117
+ // Get current workflow names
118
+ const currentJobs = this.scheduler.getJobs();
119
+ const currentWorkflows = new Set(currentJobs.map((j) => j.workflowName));
120
+ // Remove all current workflows
121
+ for (const name of currentWorkflows) {
122
+ this.scheduler.removeWorkflow(name);
123
+ }
124
+ // Reload
125
+ await this.loadWorkflows();
126
+ console.log(`[reload] Complete. ${this.scheduler.getJobCount()} jobs scheduled.`);
127
+ }
128
+ /**
129
+ * Set up file watcher event handlers
130
+ */
131
+ setupWatcherEvents() {
132
+ if (!this.watcher)
133
+ return;
134
+ this.watcher.on("workflow:added", async ({ path }) => {
135
+ console.log(`[watcher] Workflow added: ${path}`);
136
+ try {
137
+ const workflow = await loadWorkflow(path);
138
+ this.scheduler.addWorkflow(workflow);
139
+ }
140
+ catch (error) {
141
+ console.error(`[error] Failed to load new workflow: ${error.message}`);
142
+ }
143
+ });
144
+ this.watcher.on("workflow:changed", async ({ path }) => {
145
+ console.log(`[watcher] Workflow changed: ${path}`);
146
+ try {
147
+ const workflow = await loadWorkflow(path);
148
+ this.scheduler.reloadWorkflow(workflow);
149
+ }
150
+ catch (error) {
151
+ console.error(`[error] Failed to reload workflow: ${error.message}`);
152
+ }
153
+ });
154
+ this.watcher.on("workflow:removed", ({ path }) => {
155
+ console.log(`[watcher] Workflow removed: ${path}`);
156
+ // Extract workflow name from path - this is a bit fragile
157
+ const parts = path.split("/");
158
+ const name = parts[parts.length - 1];
159
+ this.scheduler.removeWorkflow(name);
160
+ });
161
+ }
162
+ /**
163
+ * Manually trigger a workflow
164
+ */
165
+ async triggerWorkflow(name, inputs) {
166
+ const workflowPaths = await listWorkflows(this.config.workflowsDir);
167
+ for (const path of workflowPaths) {
168
+ const workflow = await loadWorkflow(path);
169
+ if (workflow.name === name) {
170
+ return this.executor.run(workflow, inputs);
171
+ }
172
+ }
173
+ throw new Error(`Workflow not found: ${name}`);
174
+ }
175
+ /**
176
+ * Get all workflows
177
+ */
178
+ async getWorkflows() {
179
+ const workflowPaths = await listWorkflows(this.config.workflowsDir);
180
+ const workflows = [];
181
+ for (const path of workflowPaths) {
182
+ try {
183
+ const workflow = await loadWorkflow(path);
184
+ workflows.push(workflow);
185
+ }
186
+ catch {
187
+ // Skip invalid workflows
188
+ }
189
+ }
190
+ return workflows;
191
+ }
192
+ /**
193
+ * Get all personas (just basic info, not resolved)
194
+ */
195
+ async getPersonas() {
196
+ const personaPaths = await listPersonas(this.config.personasDir);
197
+ const personas = [];
198
+ for (const path of personaPaths) {
199
+ try {
200
+ const persona = await loadPersona(path);
201
+ personas.push({
202
+ path,
203
+ name: persona.name,
204
+ description: persona.description,
205
+ });
206
+ }
207
+ catch {
208
+ // Skip invalid personas
209
+ }
210
+ }
211
+ return personas;
212
+ }
213
+ /**
214
+ * Get recent session logs
215
+ */
216
+ async getRecentSessions(limit = 20) {
217
+ const sessions = [];
218
+ try {
219
+ const files = await readdir(this.config.sessionsDir);
220
+ const logFiles = files.filter((f) => f.endsWith(".log"));
221
+ // Sort by filename (which includes timestamp)
222
+ logFiles.sort().reverse();
223
+ for (const file of logFiles.slice(0, limit)) {
224
+ // Parse timestamp from filename: YYYYMMDD-HHMMSS.log
225
+ const match = file.match(/^(\d{8})-(\d{6})\.log$/);
226
+ if (match) {
227
+ const [, date, time] = match;
228
+ const timestamp = new Date(`${date.slice(0, 4)}-${date.slice(4, 6)}-${date.slice(6, 8)}T${time.slice(0, 2)}:${time.slice(2, 4)}:${time.slice(4, 6)}`);
229
+ sessions.push({ filename: file, timestamp });
230
+ }
231
+ }
232
+ }
233
+ catch {
234
+ // Sessions directory might not exist yet
235
+ }
236
+ return sessions;
237
+ }
238
+ /**
239
+ * Get the scheduler instance
240
+ */
241
+ getScheduler() {
242
+ return this.scheduler;
243
+ }
244
+ /**
245
+ * Check if daemon is running
246
+ */
247
+ isRunning() {
248
+ return this.running;
249
+ }
250
+ /**
251
+ * Get uptime in seconds
252
+ */
253
+ getUptime() {
254
+ if (!this.startTime)
255
+ return 0;
256
+ return Math.floor((Date.now() - this.startTime.getTime()) / 1000);
257
+ }
258
+ /**
259
+ * Get the API port
260
+ */
261
+ getPort() {
262
+ return this.port;
263
+ }
264
+ }
265
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/daemon/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from "./daemon.js";
2
+ export * from "./lib/index.js";
3
+ export * from "./api/index.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./daemon.js";
2
+ export * from "./lib/index.js";
3
+ export * from "./api/index.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type Workflow, type ExecutionResult, type DotAgentsConfig } from "../../lib/index.js";
2
+ /**
3
+ * Executor for running workflows
4
+ */
5
+ export declare class Executor {
6
+ private config;
7
+ constructor(config: DotAgentsConfig);
8
+ /**
9
+ * Execute a workflow
10
+ */
11
+ run(workflow: Workflow, inputOverrides?: Record<string, unknown>): Promise<ExecutionResult>;
12
+ /**
13
+ * Write execution log to sessions directory
14
+ */
15
+ private writeSessionLog;
16
+ }
17
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/daemon/lib/executor.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,QAAQ,EAEb,KAAK,eAAe,EACpB,KAAK,eAAe,EAMrB,MAAM,oBAAoB,CAAC;AAyD5B;;GAEG;AACH,qBAAa,QAAQ;IACP,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAE3C;;OAEG;IACG,GAAG,CACP,QAAQ,EAAE,QAAQ,EAClB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,OAAO,CAAC,eAAe,CAAC;IA8H3B;;OAEG;YACW,eAAe;CAmC9B"}
@@ -0,0 +1,169 @@
1
+ import { execa } from "execa";
2
+ import { mkdir, writeFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { resolvePersona, createExecutionContext, processTemplate, expandVariables, getInputDefaults, } from "../../lib/index.js";
5
+ /**
6
+ * Parse duration string to milliseconds
7
+ */
8
+ function parseDuration(duration) {
9
+ const match = duration.match(/^(\d+)(s|m|h)$/);
10
+ if (!match) {
11
+ throw new Error(`Invalid duration format: ${duration}`);
12
+ }
13
+ const [, value, unit] = match;
14
+ const num = parseInt(value, 10);
15
+ switch (unit) {
16
+ case "s":
17
+ return num * 1000;
18
+ case "m":
19
+ return num * 60 * 1000;
20
+ case "h":
21
+ return num * 60 * 60 * 1000;
22
+ default:
23
+ throw new Error(`Unknown duration unit: ${unit}`);
24
+ }
25
+ }
26
+ /**
27
+ * Build the full prompt for the agent
28
+ */
29
+ function buildPrompt(workflow, persona, context, inputs) {
30
+ const parts = [];
31
+ if (persona.prompt) {
32
+ const expandedPrompt = processTemplate(persona.prompt, { ...context, ...inputs }, persona.env);
33
+ parts.push(expandedPrompt);
34
+ parts.push("\n---\n");
35
+ }
36
+ const expandedTask = processTemplate(workflow.task, { ...context, ...inputs }, { ...persona.env, ...workflow.env });
37
+ parts.push(expandedTask);
38
+ return parts.join("\n");
39
+ }
40
+ /**
41
+ * Executor for running workflows
42
+ */
43
+ export class Executor {
44
+ config;
45
+ constructor(config) {
46
+ this.config = config;
47
+ }
48
+ /**
49
+ * Execute a workflow
50
+ */
51
+ async run(workflow, inputOverrides) {
52
+ const startedAt = new Date();
53
+ // Resolve persona
54
+ const persona = await resolvePersona(join(this.config.personasDir, workflow.persona), this.config.personasDir);
55
+ const context = createExecutionContext({
56
+ WORKFLOW_NAME: workflow.name,
57
+ WORKFLOW_DIR: workflow.path,
58
+ PERSONA_NAME: persona.name,
59
+ PERSONA_DIR: persona.path,
60
+ AGENTS_DIR: this.config.agentsDir,
61
+ });
62
+ // Merge inputs
63
+ const inputs = {
64
+ ...getInputDefaults(workflow),
65
+ ...inputOverrides,
66
+ };
67
+ // Merge environment
68
+ const env = {
69
+ ...process.env,
70
+ ...persona.env,
71
+ ...workflow.env,
72
+ };
73
+ for (const [key, value] of Object.entries(env)) {
74
+ if (value) {
75
+ env[key] = expandVariables(value, context, env);
76
+ }
77
+ }
78
+ // Working directory
79
+ let workingDir = workflow.working_dir ?? process.cwd();
80
+ workingDir = expandVariables(workingDir, { ...context, ...inputs }, env);
81
+ // Build prompt
82
+ const prompt = buildPrompt(workflow, persona, context, inputs);
83
+ // Timeout
84
+ const timeoutMs = workflow.timeout
85
+ ? parseDuration(workflow.timeout)
86
+ : 10 * 60 * 1000;
87
+ // Try each command
88
+ let lastError = null;
89
+ let result = null;
90
+ for (const cmd of persona.cmd) {
91
+ try {
92
+ const expandedCmd = expandVariables(cmd, context, env);
93
+ const [command, ...args] = expandedCmd.split(/\s+/);
94
+ const execResult = await execa(command, args, {
95
+ input: prompt,
96
+ cwd: workingDir,
97
+ env,
98
+ timeout: timeoutMs,
99
+ reject: false,
100
+ });
101
+ const endedAt = new Date();
102
+ result = {
103
+ success: execResult.exitCode === 0,
104
+ exitCode: execResult.exitCode ?? 1,
105
+ stdout: execResult.stdout,
106
+ stderr: execResult.stderr,
107
+ duration: endedAt.getTime() - startedAt.getTime(),
108
+ runId: context.RUN_ID,
109
+ startedAt,
110
+ endedAt,
111
+ };
112
+ if (result.success)
113
+ break;
114
+ lastError = new Error(`Command failed with exit code ${result.exitCode}: ${execResult.stderr}`);
115
+ }
116
+ catch (error) {
117
+ lastError = error;
118
+ }
119
+ }
120
+ if (!result) {
121
+ const endedAt = new Date();
122
+ result = {
123
+ success: false,
124
+ exitCode: 1,
125
+ stdout: "",
126
+ stderr: lastError?.message ?? "All commands failed",
127
+ duration: endedAt.getTime() - startedAt.getTime(),
128
+ runId: context.RUN_ID,
129
+ startedAt,
130
+ endedAt,
131
+ error: lastError?.message,
132
+ };
133
+ }
134
+ // Write session log
135
+ await this.writeSessionLog(workflow.name, persona.name, result);
136
+ return result;
137
+ }
138
+ /**
139
+ * Write execution log to sessions directory
140
+ */
141
+ async writeSessionLog(workflowName, personaName, result) {
142
+ await mkdir(this.config.sessionsDir, { recursive: true });
143
+ const timestamp = result.startedAt
144
+ .toISOString()
145
+ .replace(/[-:]/g, "")
146
+ .replace("T", "-")
147
+ .split(".")[0];
148
+ const filename = `${timestamp}.log`;
149
+ const logPath = join(this.config.sessionsDir, filename);
150
+ const logContent = `Run ID: ${result.runId}
151
+ Workflow: ${workflowName}
152
+ Persona: ${personaName}
153
+ Started: ${result.startedAt.toISOString()}
154
+ Ended: ${result.endedAt.toISOString()}
155
+ Duration: ${result.duration}ms
156
+ Exit Code: ${result.exitCode}
157
+ Success: ${result.success}
158
+ ${result.error ? `Error: ${result.error}\n` : ""}
159
+ --- STDOUT ---
160
+ ${result.stdout}
161
+
162
+ --- STDERR ---
163
+ ${result.stderr}
164
+ `;
165
+ await writeFile(logPath, logContent, "utf-8");
166
+ return logPath;
167
+ }
168
+ }
169
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/daemon/lib/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAKL,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;IAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEhC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,GAAG;YACN,OAAO,GAAG,GAAG,IAAI,CAAC;QACpB,KAAK,GAAG;YACN,OAAO,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;QACzB,KAAK,GAAG;YACN,OAAO,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC9B;YACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAClB,QAAkB,EAClB,OAAwB,EACxB,OAA+B,EAC/B,MAA+B;IAE/B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,cAAc,GAAG,eAAe,CACpC,OAAO,CAAC,MAAM,EACd,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,EAAE,EACzB,OAAO,CAAC,GAAG,CACZ,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,CAClC,QAAQ,CAAC,IAAI,EACb,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,EAAE,EACzB,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,CACpC,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAEzB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,QAAQ;IACC;IAApB,YAAoB,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAE/C;;OAEG;IACH,KAAK,CAAC,GAAG,CACP,QAAkB,EAClB,cAAwC;QAExC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAE7B,kBAAkB;QAClB,MAAM,OAAO,GAAG,MAAM,cAAc,CAClC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,EAC/C,IAAI,CAAC,MAAM,CAAC,WAAW,CACxB,CAAC;QAEF,MAAM,OAAO,GAAG,sBAAsB,CAAC;YACrC,aAAa,EAAE,QAAQ,CAAC,IAAI;YAC5B,YAAY,EAAE,QAAQ,CAAC,IAAI;YAC3B,YAAY,EAAE,OAAO,CAAC,IAAI;YAC1B,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;SAClC,CAAC,CAAC;QAEH,eAAe;QACf,MAAM,MAAM,GAA4B;YACtC,GAAG,gBAAgB,CAAC,QAAQ,CAAC;YAC7B,GAAG,cAAc;SAClB,CAAC;QAEF,oBAAoB;QACpB,MAAM,GAAG,GAA2B;YAClC,GAAG,OAAO,CAAC,GAAG;YACd,GAAG,OAAO,CAAC,GAAG;YACd,GAAG,QAAQ,CAAC,GAAG;SACU,CAAC;QAE5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAI,KAAK,EAAE,CAAC;gBACV,GAAG,CAAC,GAAG,CAAC,GAAG,eAAe,CACxB,KAAK,EACL,OAAiC,EACjC,GAAG,CACJ,CAAC;YACJ,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,IAAI,UAAU,GAAG,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACvD,UAAU,GAAG,eAAe,CAC1B,UAAU,EACV,EAAE,GAAG,OAAO,EAAE,GAAI,MAAiC,EAAE,EACrD,GAAG,CACJ,CAAC;QAEF,eAAe;QACf,MAAM,MAAM,GAAG,WAAW,CACxB,QAAQ,EACR,OAAO,EACP,OAAiC,EACjC,MAAM,CACP,CAAC;QAEF,UAAU;QACV,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO;YAChC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;YACjC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAEnB,mBAAmB;QACnB,IAAI,SAAS,GAAiB,IAAI,CAAC;QACnC,IAAI,MAAM,GAA2B,IAAI,CAAC;QAE1C,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,eAAe,CACjC,GAAG,EACH,OAAiC,EACjC,GAAG,CACJ,CAAC;gBACF,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAEpD,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;oBAC5C,KAAK,EAAE,MAAM;oBACb,GAAG,EAAE,UAAU;oBACf,GAAG;oBACH,OAAO,EAAE,SAAS;oBAClB,MAAM,EAAE,KAAK;iBACd,CAAC,CAAC;gBAEH,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;gBAE3B,MAAM,GAAG;oBACP,OAAO,EAAE,UAAU,CAAC,QAAQ,KAAK,CAAC;oBAClC,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,CAAC;oBAClC,MAAM,EAAE,UAAU,CAAC,MAAM;oBACzB,MAAM,EAAE,UAAU,CAAC,MAAM;oBACzB,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE;oBACjD,KAAK,EAAE,OAAO,CAAC,MAAM;oBACrB,SAAS;oBACT,OAAO;iBACR,CAAC;gBAEF,IAAI,MAAM,CAAC,OAAO;oBAAE,MAAM;gBAE1B,SAAS,GAAG,IAAI,KAAK,CACnB,iCAAiC,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,MAAM,EAAE,CACzE,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAc,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;YAC3B,MAAM,GAAG;gBACP,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,CAAC;gBACX,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,SAAS,EAAE,OAAO,IAAI,qBAAqB;gBACnD,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE;gBACjD,KAAK,EAAE,OAAO,CAAC,MAAM;gBACrB,SAAS;gBACT,OAAO;gBACP,KAAK,EAAE,SAAS,EAAE,OAAO;aAC1B,CAAC;QACJ,CAAC;QAED,oBAAoB;QACpB,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEhE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAC3B,YAAoB,EACpB,WAAmB,EACnB,MAAuB;QAEvB,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;aAC/B,WAAW,EAAE;aACb,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;aACpB,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;aACjB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjB,MAAM,QAAQ,GAAG,GAAG,SAAS,MAAM,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAExD,MAAM,UAAU,GAAG,WAAW,MAAM,CAAC,KAAK;YAClC,YAAY;WACb,WAAW;WACX,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE;SAChC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE;YACzB,MAAM,CAAC,QAAQ;aACd,MAAM,CAAC,QAAQ;WACjB,MAAM,CAAC,OAAO;EACvB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE;;EAE9C,MAAM,CAAC,MAAM;;;EAGb,MAAM,CAAC,MAAM;CACd,CAAC;QAEE,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export * from "./scheduler.js";
2
+ export * from "./executor.js";
3
+ export * from "./watcher.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/daemon/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./scheduler.js";
2
+ export * from "./executor.js";
3
+ export * from "./watcher.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/daemon/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,90 @@
1
+ import { EventEmitter } from "node:events";
2
+ import type { Workflow } from "../../lib/index.js";
3
+ /**
4
+ * Scheduled job info
5
+ */
6
+ export interface ScheduledJob {
7
+ id: string;
8
+ workflowName: string;
9
+ cron: string;
10
+ nextRun: Date | null;
11
+ lastRun: Date | null;
12
+ lastStatus: "success" | "failure" | null;
13
+ inputs?: Record<string, unknown>;
14
+ }
15
+ /**
16
+ * Events emitted by the scheduler
17
+ */
18
+ export interface SchedulerEvents {
19
+ "job:trigger": {
20
+ job: ScheduledJob;
21
+ workflow: Workflow;
22
+ };
23
+ "job:added": {
24
+ job: ScheduledJob;
25
+ };
26
+ "job:removed": {
27
+ jobId: string;
28
+ };
29
+ "scheduler:started": void;
30
+ "scheduler:stopped": void;
31
+ }
32
+ /**
33
+ * Scheduler for workflow cron jobs
34
+ */
35
+ export declare class Scheduler extends EventEmitter {
36
+ private jobs;
37
+ private jobInfo;
38
+ private workflows;
39
+ private running;
40
+ constructor();
41
+ /**
42
+ * Start the scheduler
43
+ */
44
+ start(): void;
45
+ /**
46
+ * Stop the scheduler
47
+ */
48
+ stop(): void;
49
+ /**
50
+ * Add a workflow's schedules to the scheduler
51
+ */
52
+ addWorkflow(workflow: Workflow): void;
53
+ /**
54
+ * Remove a workflow's schedules from the scheduler
55
+ */
56
+ removeWorkflow(workflowName: string): void;
57
+ /**
58
+ * Reload a workflow (remove and re-add)
59
+ */
60
+ reloadWorkflow(workflow: Workflow): void;
61
+ /**
62
+ * Get all scheduled jobs
63
+ */
64
+ getJobs(): ScheduledJob[];
65
+ /**
66
+ * Get a specific job by ID
67
+ */
68
+ getJob(jobId: string): ScheduledJob | null;
69
+ /**
70
+ * Manually trigger a job
71
+ */
72
+ triggerJob(jobId: string): void;
73
+ /**
74
+ * Manually trigger a workflow by name
75
+ */
76
+ triggerWorkflow(workflowName: string): boolean;
77
+ /**
78
+ * Update job status after execution
79
+ */
80
+ updateJobStatus(jobId: string, success: boolean): void;
81
+ /**
82
+ * Check if scheduler is running
83
+ */
84
+ isRunning(): boolean;
85
+ /**
86
+ * Get count of scheduled jobs
87
+ */
88
+ getJobCount(): number;
89
+ }
90
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../src/daemon/lib/scheduler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE;QAAE,GAAG,EAAE,YAAY,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC;IACzD,WAAW,EAAE;QAAE,GAAG,EAAE,YAAY,CAAA;KAAE,CAAC;IACnC,aAAa,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,mBAAmB,EAAE,IAAI,CAAC;IAC1B,mBAAmB,EAAE,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAO,CAAC,IAAI,CAAmC;IAC/C,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,OAAO,CAAS;;IAMxB;;OAEG;IACH,KAAK,IAAI,IAAI;IAWb;;OAEG;IACH,IAAI,IAAI,IAAI;IAWZ;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAoCrC;;OAEG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAa1C;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAKxC;;OAEG;IACH,OAAO,IAAI,YAAY,EAAE;IAmBzB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAI1C;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAY/B;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IA4B9C;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAOtD;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,WAAW,IAAI,MAAM;CAGtB"}