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.
- package/LICENSE +21 -0
- package/README.md +238 -0
- package/dist/cli/commands/daemon.d.ts +3 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -0
- package/dist/cli/commands/daemon.js +179 -0
- package/dist/cli/commands/daemon.js.map +1 -0
- package/dist/cli/commands/index.d.ts +6 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +6 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/list.d.ts +3 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +100 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/run.d.ts +3 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +107 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/schedule.d.ts +3 -0
- package/dist/cli/commands/schedule.d.ts.map +1 -0
- package/dist/cli/commands/schedule.js +172 -0
- package/dist/cli/commands/schedule.js.map +1 -0
- package/dist/cli/commands/show.d.ts +3 -0
- package/dist/cli/commands/show.d.ts.map +1 -0
- package/dist/cli/commands/show.js +122 -0
- package/dist/cli/commands/show.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +38 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/lib/index.d.ts +2 -0
- package/dist/cli/lib/index.d.ts.map +1 -0
- package/dist/cli/lib/index.js +2 -0
- package/dist/cli/lib/index.js.map +1 -0
- package/dist/cli/lib/runner.d.ts +41 -0
- package/dist/cli/lib/runner.d.ts.map +1 -0
- package/dist/cli/lib/runner.js +179 -0
- package/dist/cli/lib/runner.js.map +1 -0
- package/dist/daemon/api/index.d.ts +2 -0
- package/dist/daemon/api/index.d.ts.map +1 -0
- package/dist/daemon/api/index.js +2 -0
- package/dist/daemon/api/index.js.map +1 -0
- package/dist/daemon/api/server.d.ts +12 -0
- package/dist/daemon/api/server.d.ts.map +1 -0
- package/dist/daemon/api/server.js +111 -0
- package/dist/daemon/api/server.js.map +1 -0
- package/dist/daemon/daemon.d.ts +95 -0
- package/dist/daemon/daemon.d.ts.map +1 -0
- package/dist/daemon/daemon.js +265 -0
- package/dist/daemon/daemon.js.map +1 -0
- package/dist/daemon/index.d.ts +4 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +4 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/lib/executor.d.ts +17 -0
- package/dist/daemon/lib/executor.d.ts.map +1 -0
- package/dist/daemon/lib/executor.js +169 -0
- package/dist/daemon/lib/executor.js.map +1 -0
- package/dist/daemon/lib/index.d.ts +4 -0
- package/dist/daemon/lib/index.d.ts.map +1 -0
- package/dist/daemon/lib/index.js +4 -0
- package/dist/daemon/lib/index.js.map +1 -0
- package/dist/daemon/lib/scheduler.d.ts +90 -0
- package/dist/daemon/lib/scheduler.d.ts.map +1 -0
- package/dist/daemon/lib/scheduler.js +176 -0
- package/dist/daemon/lib/scheduler.js.map +1 -0
- package/dist/daemon/lib/watcher.d.ts +48 -0
- package/dist/daemon/lib/watcher.d.ts.map +1 -0
- package/dist/daemon/lib/watcher.js +77 -0
- package/dist/daemon/lib/watcher.js.map +1 -0
- package/dist/lib/config.d.ts +14 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +76 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/frontmatter.d.ts +18 -0
- package/dist/lib/frontmatter.d.ts.map +1 -0
- package/dist/lib/frontmatter.js +26 -0
- package/dist/lib/frontmatter.js.map +1 -0
- package/dist/lib/index.d.ts +7 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +9 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/persona.d.ts +32 -0
- package/dist/lib/persona.d.ts.map +1 -0
- package/dist/lib/persona.js +177 -0
- package/dist/lib/persona.js.map +1 -0
- package/dist/lib/types/index.d.ts +69 -0
- package/dist/lib/types/index.d.ts.map +1 -0
- package/dist/lib/types/index.js +4 -0
- package/dist/lib/types/index.js.map +1 -0
- package/dist/lib/types/persona.d.ts +46 -0
- package/dist/lib/types/persona.d.ts.map +1 -0
- package/dist/lib/types/persona.js +2 -0
- package/dist/lib/types/persona.js.map +1 -0
- package/dist/lib/types/triggers.d.ts +96 -0
- package/dist/lib/types/triggers.d.ts.map +1 -0
- package/dist/lib/types/triggers.js +2 -0
- package/dist/lib/types/triggers.js.map +1 -0
- package/dist/lib/types/workflow.d.ts +75 -0
- package/dist/lib/types/workflow.d.ts.map +1 -0
- package/dist/lib/types/workflow.js +2 -0
- package/dist/lib/types/workflow.js.map +1 -0
- package/dist/lib/variables.d.ts +28 -0
- package/dist/lib/variables.d.ts.map +1 -0
- package/dist/lib/variables.js +113 -0
- package/dist/lib/variables.js.map +1 -0
- package/dist/lib/workflow.d.ts +29 -0
- package/dist/lib/workflow.d.ts.map +1 -0
- package/dist/lib/workflow.js +155 -0
- package/dist/lib/workflow.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { execa } from "execa";
|
|
2
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { createExecutionContext, processTemplate, expandVariables, getInputDefaults, } from "../../lib/index.js";
|
|
5
|
+
/**
|
|
6
|
+
* Parse duration string to milliseconds
|
|
7
|
+
* Supports: "30s", "5m", "1h"
|
|
8
|
+
*/
|
|
9
|
+
export function parseDuration(duration) {
|
|
10
|
+
const match = duration.match(/^(\d+)(s|m|h)$/);
|
|
11
|
+
if (!match) {
|
|
12
|
+
throw new Error(`Invalid duration format: ${duration}`);
|
|
13
|
+
}
|
|
14
|
+
const [, value, unit] = match;
|
|
15
|
+
const num = parseInt(value, 10);
|
|
16
|
+
switch (unit) {
|
|
17
|
+
case "s":
|
|
18
|
+
return num * 1000;
|
|
19
|
+
case "m":
|
|
20
|
+
return num * 60 * 1000;
|
|
21
|
+
case "h":
|
|
22
|
+
return num * 60 * 60 * 1000;
|
|
23
|
+
default:
|
|
24
|
+
throw new Error(`Unknown duration unit: ${unit}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Build the full prompt for the agent
|
|
29
|
+
*/
|
|
30
|
+
export function buildPrompt(workflow, persona, context, inputs) {
|
|
31
|
+
const parts = [];
|
|
32
|
+
// Add persona system prompt if present
|
|
33
|
+
if (persona.prompt) {
|
|
34
|
+
const expandedPrompt = processTemplate(persona.prompt, { ...context, ...inputs }, persona.env);
|
|
35
|
+
parts.push(expandedPrompt);
|
|
36
|
+
parts.push("\n---\n");
|
|
37
|
+
}
|
|
38
|
+
// Add workflow task
|
|
39
|
+
const expandedTask = processTemplate(workflow.task, { ...context, ...inputs }, { ...persona.env, ...workflow.env });
|
|
40
|
+
parts.push(expandedTask);
|
|
41
|
+
return parts.join("\n");
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Run a workflow with a resolved persona
|
|
45
|
+
*/
|
|
46
|
+
export async function runWorkflow(workflow, persona, options = {}) {
|
|
47
|
+
const startedAt = new Date();
|
|
48
|
+
const context = createExecutionContext({
|
|
49
|
+
WORKFLOW_NAME: workflow.name,
|
|
50
|
+
WORKFLOW_DIR: workflow.path,
|
|
51
|
+
PERSONA_NAME: persona.name,
|
|
52
|
+
PERSONA_DIR: persona.path,
|
|
53
|
+
});
|
|
54
|
+
// Merge inputs: defaults < workflow inputs < options.inputs
|
|
55
|
+
const inputs = {
|
|
56
|
+
...getInputDefaults(workflow),
|
|
57
|
+
...options.inputs,
|
|
58
|
+
};
|
|
59
|
+
// Merge environment
|
|
60
|
+
const env = {
|
|
61
|
+
...process.env,
|
|
62
|
+
...persona.env,
|
|
63
|
+
...workflow.env,
|
|
64
|
+
...options.env,
|
|
65
|
+
};
|
|
66
|
+
// Expand environment variable values
|
|
67
|
+
for (const [key, value] of Object.entries(env)) {
|
|
68
|
+
if (value) {
|
|
69
|
+
env[key] = expandVariables(value, context, env);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Determine working directory
|
|
73
|
+
let workingDir = options.workingDir ?? workflow.working_dir ?? process.cwd();
|
|
74
|
+
workingDir = expandVariables(workingDir, { ...context, ...inputs }, env);
|
|
75
|
+
// Build the prompt
|
|
76
|
+
const prompt = buildPrompt(workflow, persona, context, inputs);
|
|
77
|
+
// Determine timeout
|
|
78
|
+
const timeoutMs = options.timeout
|
|
79
|
+
? parseDuration(options.timeout)
|
|
80
|
+
: workflow.timeout
|
|
81
|
+
? parseDuration(workflow.timeout)
|
|
82
|
+
: 10 * 60 * 1000; // Default 10 minutes
|
|
83
|
+
// Dry run - just return the prompt
|
|
84
|
+
if (options.dryRun) {
|
|
85
|
+
return {
|
|
86
|
+
success: true,
|
|
87
|
+
exitCode: 0,
|
|
88
|
+
stdout: prompt,
|
|
89
|
+
stderr: "",
|
|
90
|
+
duration: 0,
|
|
91
|
+
runId: context.RUN_ID,
|
|
92
|
+
startedAt,
|
|
93
|
+
endedAt: new Date(),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// Try each command in order
|
|
97
|
+
let lastError = null;
|
|
98
|
+
let result = null;
|
|
99
|
+
for (const cmd of persona.cmd) {
|
|
100
|
+
try {
|
|
101
|
+
const expandedCmd = expandVariables(cmd, context, env);
|
|
102
|
+
const [command, ...args] = expandedCmd.split(/\s+/);
|
|
103
|
+
const subprocess = execa(command, args, {
|
|
104
|
+
input: prompt,
|
|
105
|
+
cwd: workingDir,
|
|
106
|
+
env,
|
|
107
|
+
timeout: timeoutMs,
|
|
108
|
+
reject: false,
|
|
109
|
+
});
|
|
110
|
+
const execResult = await subprocess;
|
|
111
|
+
const endedAt = new Date();
|
|
112
|
+
result = {
|
|
113
|
+
success: execResult.exitCode === 0,
|
|
114
|
+
exitCode: execResult.exitCode ?? 1,
|
|
115
|
+
stdout: execResult.stdout,
|
|
116
|
+
stderr: execResult.stderr,
|
|
117
|
+
duration: endedAt.getTime() - startedAt.getTime(),
|
|
118
|
+
runId: context.RUN_ID,
|
|
119
|
+
startedAt,
|
|
120
|
+
endedAt,
|
|
121
|
+
};
|
|
122
|
+
if (result.success) {
|
|
123
|
+
break; // Success, no need to try fallback commands
|
|
124
|
+
}
|
|
125
|
+
lastError = new Error(`Command failed with exit code ${result.exitCode}: ${execResult.stderr}`);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
lastError = error;
|
|
129
|
+
// Continue to next fallback command
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (!result) {
|
|
133
|
+
const endedAt = new Date();
|
|
134
|
+
return {
|
|
135
|
+
success: false,
|
|
136
|
+
exitCode: 1,
|
|
137
|
+
stdout: "",
|
|
138
|
+
stderr: lastError?.message ?? "All commands failed",
|
|
139
|
+
duration: endedAt.getTime() - startedAt.getTime(),
|
|
140
|
+
runId: context.RUN_ID,
|
|
141
|
+
startedAt,
|
|
142
|
+
endedAt,
|
|
143
|
+
error: lastError?.message,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Ensure log directory exists and write execution log
|
|
150
|
+
*/
|
|
151
|
+
export async function writeExecutionLog(sessionsDir, metadata, result) {
|
|
152
|
+
await mkdir(sessionsDir, { recursive: true });
|
|
153
|
+
// Format: YYYYMMDD-HHMMSS.log
|
|
154
|
+
const timestamp = result.startedAt
|
|
155
|
+
.toISOString()
|
|
156
|
+
.replace(/[-:]/g, "")
|
|
157
|
+
.replace("T", "-")
|
|
158
|
+
.split(".")[0];
|
|
159
|
+
const filename = `${timestamp}.log`;
|
|
160
|
+
const logPath = join(sessionsDir, filename);
|
|
161
|
+
const logContent = `Run ID: ${result.runId}
|
|
162
|
+
Workflow: ${metadata.workflowName}
|
|
163
|
+
Persona: ${metadata.personaName}
|
|
164
|
+
Started: ${result.startedAt.toISOString()}
|
|
165
|
+
Ended: ${result.endedAt.toISOString()}
|
|
166
|
+
Duration: ${result.duration}ms
|
|
167
|
+
Exit Code: ${result.exitCode}
|
|
168
|
+
Success: ${result.success}
|
|
169
|
+
${result.error ? `Error: ${result.error}\n` : ""}
|
|
170
|
+
--- STDOUT ---
|
|
171
|
+
${result.stdout}
|
|
172
|
+
|
|
173
|
+
--- STDERR ---
|
|
174
|
+
${result.stderr}
|
|
175
|
+
`;
|
|
176
|
+
await writeFile(logPath, logContent, "utf-8");
|
|
177
|
+
return logPath;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/cli/lib/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/daemon/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/daemon/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type Express } from "express";
|
|
2
|
+
import type { Server } from "node:http";
|
|
3
|
+
import type { Daemon } from "../daemon.js";
|
|
4
|
+
/**
|
|
5
|
+
* Create the HTTP API server
|
|
6
|
+
*/
|
|
7
|
+
export declare function createApiServer(daemon: Daemon): Express;
|
|
8
|
+
/**
|
|
9
|
+
* Start the API server
|
|
10
|
+
*/
|
|
11
|
+
export declare function startApiServer(app: Express, port: number): Promise<Server>;
|
|
12
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/daemon/api/server.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,KAAK,OAAO,EAA+B,MAAM,SAAS,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAsB3C;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAsGvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAMjB"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import express from "express";
|
|
2
|
+
/**
|
|
3
|
+
* Create the HTTP API server
|
|
4
|
+
*/
|
|
5
|
+
export function createApiServer(daemon) {
|
|
6
|
+
const app = express();
|
|
7
|
+
app.use(express.json());
|
|
8
|
+
// Health check
|
|
9
|
+
app.get("/health", (_req, res) => {
|
|
10
|
+
res.json({ ok: true });
|
|
11
|
+
});
|
|
12
|
+
// Status
|
|
13
|
+
app.get("/status", (_req, res) => {
|
|
14
|
+
const status = {
|
|
15
|
+
status: daemon.isRunning() ? "running" : "stopped",
|
|
16
|
+
uptime: daemon.getUptime(),
|
|
17
|
+
jobs: daemon.getScheduler().getJobCount(),
|
|
18
|
+
version: "0.1.0",
|
|
19
|
+
};
|
|
20
|
+
res.json(status);
|
|
21
|
+
});
|
|
22
|
+
// List scheduled jobs
|
|
23
|
+
app.get("/jobs", (_req, res) => {
|
|
24
|
+
const jobs = daemon.getScheduler().getJobs();
|
|
25
|
+
const response = { jobs };
|
|
26
|
+
res.json(response);
|
|
27
|
+
});
|
|
28
|
+
// Get specific job
|
|
29
|
+
app.get("/jobs/:id", (req, res) => {
|
|
30
|
+
const job = daemon.getScheduler().getJob(req.params.id);
|
|
31
|
+
if (!job) {
|
|
32
|
+
res.status(404).json({ error: "Job not found" });
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
res.json(job);
|
|
36
|
+
});
|
|
37
|
+
// Trigger a workflow
|
|
38
|
+
app.post("/trigger/:workflow", async (req, res) => {
|
|
39
|
+
const workflowName = req.params.workflow;
|
|
40
|
+
const inputs = req.body?.inputs;
|
|
41
|
+
try {
|
|
42
|
+
const result = await daemon.triggerWorkflow(workflowName, inputs);
|
|
43
|
+
const response = {
|
|
44
|
+
success: result.success,
|
|
45
|
+
message: result.success
|
|
46
|
+
? `Workflow ${workflowName} completed successfully`
|
|
47
|
+
: `Workflow ${workflowName} failed`,
|
|
48
|
+
runId: result.runId,
|
|
49
|
+
};
|
|
50
|
+
res.json(response);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
res.status(500).json({
|
|
54
|
+
success: false,
|
|
55
|
+
message: error.message,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
// List workflows
|
|
60
|
+
app.get("/workflows", async (_req, res) => {
|
|
61
|
+
try {
|
|
62
|
+
const workflows = await daemon.getWorkflows();
|
|
63
|
+
res.json({ workflows });
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
res.status(500).json({ error: error.message });
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
// List personas
|
|
70
|
+
app.get("/personas", async (_req, res) => {
|
|
71
|
+
try {
|
|
72
|
+
const personas = await daemon.getPersonas();
|
|
73
|
+
res.json({ personas });
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
res.status(500).json({ error: error.message });
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
// Recent sessions/logs
|
|
80
|
+
app.get("/sessions", async (_req, res) => {
|
|
81
|
+
try {
|
|
82
|
+
const sessions = await daemon.getRecentSessions(20);
|
|
83
|
+
res.json({ sessions });
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
res.status(500).json({ error: error.message });
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
// Reload workflows (after file changes)
|
|
90
|
+
app.post("/reload", async (_req, res) => {
|
|
91
|
+
try {
|
|
92
|
+
await daemon.reloadWorkflows();
|
|
93
|
+
res.json({ success: true, message: "Workflows reloaded" });
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
res.status(500).json({ error: error.message });
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
return app;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Start the API server
|
|
103
|
+
*/
|
|
104
|
+
export function startApiServer(app, port) {
|
|
105
|
+
return new Promise((resolve) => {
|
|
106
|
+
const server = app.listen(port, () => {
|
|
107
|
+
resolve(server);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/daemon/api/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { type DotAgentsConfig, type Workflow, type ExecutionResult } from "../lib/index.js";
|
|
2
|
+
import { Scheduler } from "./lib/scheduler.js";
|
|
3
|
+
/**
|
|
4
|
+
* Daemon configuration options
|
|
5
|
+
*/
|
|
6
|
+
export interface DaemonOptions {
|
|
7
|
+
/** HTTP API port */
|
|
8
|
+
port?: number;
|
|
9
|
+
/** Enable file watching */
|
|
10
|
+
watch?: boolean;
|
|
11
|
+
/** Custom config (auto-detected if not provided) */
|
|
12
|
+
config?: DotAgentsConfig;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Session log metadata
|
|
16
|
+
*/
|
|
17
|
+
export interface SessionInfo {
|
|
18
|
+
filename: string;
|
|
19
|
+
timestamp: Date;
|
|
20
|
+
workflow?: string;
|
|
21
|
+
persona?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Main daemon class
|
|
25
|
+
*/
|
|
26
|
+
export declare class Daemon {
|
|
27
|
+
private config;
|
|
28
|
+
private scheduler;
|
|
29
|
+
private executor;
|
|
30
|
+
private watcher;
|
|
31
|
+
private apiServer;
|
|
32
|
+
private app;
|
|
33
|
+
private startTime;
|
|
34
|
+
private running;
|
|
35
|
+
private port;
|
|
36
|
+
private watchEnabled;
|
|
37
|
+
constructor(options?: DaemonOptions);
|
|
38
|
+
/**
|
|
39
|
+
* Start the daemon
|
|
40
|
+
*/
|
|
41
|
+
start(): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Stop the daemon
|
|
44
|
+
*/
|
|
45
|
+
stop(): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Load all workflows and add to scheduler
|
|
48
|
+
*/
|
|
49
|
+
private loadWorkflows;
|
|
50
|
+
/**
|
|
51
|
+
* Reload all workflows
|
|
52
|
+
*/
|
|
53
|
+
reloadWorkflows(): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Set up file watcher event handlers
|
|
56
|
+
*/
|
|
57
|
+
private setupWatcherEvents;
|
|
58
|
+
/**
|
|
59
|
+
* Manually trigger a workflow
|
|
60
|
+
*/
|
|
61
|
+
triggerWorkflow(name: string, inputs?: Record<string, unknown>): Promise<ExecutionResult>;
|
|
62
|
+
/**
|
|
63
|
+
* Get all workflows
|
|
64
|
+
*/
|
|
65
|
+
getWorkflows(): Promise<Workflow[]>;
|
|
66
|
+
/**
|
|
67
|
+
* Get all personas (just basic info, not resolved)
|
|
68
|
+
*/
|
|
69
|
+
getPersonas(): Promise<Array<{
|
|
70
|
+
path: string;
|
|
71
|
+
name: string;
|
|
72
|
+
description?: string;
|
|
73
|
+
}>>;
|
|
74
|
+
/**
|
|
75
|
+
* Get recent session logs
|
|
76
|
+
*/
|
|
77
|
+
getRecentSessions(limit?: number): Promise<SessionInfo[]>;
|
|
78
|
+
/**
|
|
79
|
+
* Get the scheduler instance
|
|
80
|
+
*/
|
|
81
|
+
getScheduler(): Scheduler;
|
|
82
|
+
/**
|
|
83
|
+
* Check if daemon is running
|
|
84
|
+
*/
|
|
85
|
+
isRunning(): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Get uptime in seconds
|
|
88
|
+
*/
|
|
89
|
+
getUptime(): number;
|
|
90
|
+
/**
|
|
91
|
+
* Get the API port
|
|
92
|
+
*/
|
|
93
|
+
getPort(): number;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=daemon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/daemon/daemon.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,eAAe,EAMrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAqB,MAAM,oBAAoB,CAAC;AAKlE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oBAAoB;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oDAAoD;IACpD,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,GAAG,CAAwB;IACnC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,YAAY,CAAU;gBAElB,OAAO,GAAE,aAAkB;IAyBvC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B;;OAEG;YACW,aAAa;IAc3B;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBtC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgC1B;;OAEG;IACG,eAAe,CACnB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,eAAe,CAAC;IAa3B;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAgBzC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAoBzF;;OAEG;IACG,iBAAiB,CAAC,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA4BnE;;OAEG;IACH,YAAY,IAAI,SAAS;IAIzB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,SAAS,IAAI,MAAM;IAKnB;;OAEG;IACH,OAAO,IAAI,MAAM;CAGlB"}
|