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,176 @@
|
|
|
1
|
+
import { CronJob } from "cron";
|
|
2
|
+
import { EventEmitter } from "node:events";
|
|
3
|
+
/**
|
|
4
|
+
* Scheduler for workflow cron jobs
|
|
5
|
+
*/
|
|
6
|
+
export class Scheduler extends EventEmitter {
|
|
7
|
+
jobs = new Map();
|
|
8
|
+
jobInfo = new Map();
|
|
9
|
+
workflows = new Map();
|
|
10
|
+
running = false;
|
|
11
|
+
constructor() {
|
|
12
|
+
super();
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Start the scheduler
|
|
16
|
+
*/
|
|
17
|
+
start() {
|
|
18
|
+
if (this.running)
|
|
19
|
+
return;
|
|
20
|
+
this.running = true;
|
|
21
|
+
for (const job of this.jobs.values()) {
|
|
22
|
+
job.start();
|
|
23
|
+
}
|
|
24
|
+
this.emit("scheduler:started");
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Stop the scheduler
|
|
28
|
+
*/
|
|
29
|
+
stop() {
|
|
30
|
+
if (!this.running)
|
|
31
|
+
return;
|
|
32
|
+
this.running = false;
|
|
33
|
+
for (const job of this.jobs.values()) {
|
|
34
|
+
job.stop();
|
|
35
|
+
}
|
|
36
|
+
this.emit("scheduler:stopped");
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Add a workflow's schedules to the scheduler
|
|
40
|
+
*/
|
|
41
|
+
addWorkflow(workflow) {
|
|
42
|
+
this.workflows.set(workflow.name, workflow);
|
|
43
|
+
if (!workflow.on?.schedule)
|
|
44
|
+
return;
|
|
45
|
+
for (let i = 0; i < workflow.on.schedule.length; i++) {
|
|
46
|
+
const schedule = workflow.on.schedule[i];
|
|
47
|
+
const jobId = `${workflow.name}:${i}`;
|
|
48
|
+
const jobInfo = {
|
|
49
|
+
id: jobId,
|
|
50
|
+
workflowName: workflow.name,
|
|
51
|
+
cron: schedule.cron,
|
|
52
|
+
nextRun: null,
|
|
53
|
+
lastRun: null,
|
|
54
|
+
lastStatus: null,
|
|
55
|
+
inputs: schedule.inputs,
|
|
56
|
+
};
|
|
57
|
+
const cronJob = new CronJob(schedule.cron, () => this.triggerJob(jobId), null, this.running);
|
|
58
|
+
this.jobs.set(jobId, cronJob);
|
|
59
|
+
this.jobInfo.set(jobId, jobInfo);
|
|
60
|
+
// Update next run time
|
|
61
|
+
jobInfo.nextRun = cronJob.nextDate().toJSDate();
|
|
62
|
+
this.emit("job:added", { job: jobInfo });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Remove a workflow's schedules from the scheduler
|
|
67
|
+
*/
|
|
68
|
+
removeWorkflow(workflowName) {
|
|
69
|
+
this.workflows.delete(workflowName);
|
|
70
|
+
for (const [jobId, job] of this.jobs.entries()) {
|
|
71
|
+
if (jobId.startsWith(`${workflowName}:`)) {
|
|
72
|
+
job.stop();
|
|
73
|
+
this.jobs.delete(jobId);
|
|
74
|
+
this.jobInfo.delete(jobId);
|
|
75
|
+
this.emit("job:removed", { jobId });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Reload a workflow (remove and re-add)
|
|
81
|
+
*/
|
|
82
|
+
reloadWorkflow(workflow) {
|
|
83
|
+
this.removeWorkflow(workflow.name);
|
|
84
|
+
this.addWorkflow(workflow);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get all scheduled jobs
|
|
88
|
+
*/
|
|
89
|
+
getJobs() {
|
|
90
|
+
const jobs = [];
|
|
91
|
+
for (const [jobId, cronJob] of this.jobs.entries()) {
|
|
92
|
+
const info = this.jobInfo.get(jobId);
|
|
93
|
+
if (info) {
|
|
94
|
+
// Update next run time
|
|
95
|
+
info.nextRun = cronJob.nextDate().toJSDate();
|
|
96
|
+
jobs.push(info);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return jobs.sort((a, b) => {
|
|
100
|
+
if (!a.nextRun)
|
|
101
|
+
return 1;
|
|
102
|
+
if (!b.nextRun)
|
|
103
|
+
return -1;
|
|
104
|
+
return a.nextRun.getTime() - b.nextRun.getTime();
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get a specific job by ID
|
|
109
|
+
*/
|
|
110
|
+
getJob(jobId) {
|
|
111
|
+
return this.jobInfo.get(jobId) ?? null;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Manually trigger a job
|
|
115
|
+
*/
|
|
116
|
+
triggerJob(jobId) {
|
|
117
|
+
const info = this.jobInfo.get(jobId);
|
|
118
|
+
if (!info)
|
|
119
|
+
return;
|
|
120
|
+
const workflow = this.workflows.get(info.workflowName);
|
|
121
|
+
if (!workflow)
|
|
122
|
+
return;
|
|
123
|
+
info.lastRun = new Date();
|
|
124
|
+
this.emit("job:trigger", { job: info, workflow });
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Manually trigger a workflow by name
|
|
128
|
+
*/
|
|
129
|
+
triggerWorkflow(workflowName) {
|
|
130
|
+
const workflow = this.workflows.get(workflowName);
|
|
131
|
+
if (!workflow)
|
|
132
|
+
return false;
|
|
133
|
+
// Find the first job for this workflow, or create a one-off trigger
|
|
134
|
+
for (const [jobId, info] of this.jobInfo.entries()) {
|
|
135
|
+
if (info.workflowName === workflowName) {
|
|
136
|
+
this.triggerJob(jobId);
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// No scheduled job, but workflow exists - emit trigger anyway
|
|
141
|
+
this.emit("job:trigger", {
|
|
142
|
+
job: {
|
|
143
|
+
id: `${workflowName}:manual`,
|
|
144
|
+
workflowName,
|
|
145
|
+
cron: "manual",
|
|
146
|
+
nextRun: null,
|
|
147
|
+
lastRun: new Date(),
|
|
148
|
+
lastStatus: null,
|
|
149
|
+
},
|
|
150
|
+
workflow,
|
|
151
|
+
});
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Update job status after execution
|
|
156
|
+
*/
|
|
157
|
+
updateJobStatus(jobId, success) {
|
|
158
|
+
const info = this.jobInfo.get(jobId);
|
|
159
|
+
if (info) {
|
|
160
|
+
info.lastStatus = success ? "success" : "failure";
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Check if scheduler is running
|
|
165
|
+
*/
|
|
166
|
+
isRunning() {
|
|
167
|
+
return this.running;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Get count of scheduled jobs
|
|
171
|
+
*/
|
|
172
|
+
getJobCount() {
|
|
173
|
+
return this.jobs.size;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../../src/daemon/lib/scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
/**
|
|
3
|
+
* Events emitted by the watcher
|
|
4
|
+
*/
|
|
5
|
+
export interface WatcherEvents {
|
|
6
|
+
"workflow:added": {
|
|
7
|
+
path: string;
|
|
8
|
+
};
|
|
9
|
+
"workflow:changed": {
|
|
10
|
+
path: string;
|
|
11
|
+
};
|
|
12
|
+
"workflow:removed": {
|
|
13
|
+
path: string;
|
|
14
|
+
};
|
|
15
|
+
"persona:added": {
|
|
16
|
+
path: string;
|
|
17
|
+
};
|
|
18
|
+
"persona:changed": {
|
|
19
|
+
path: string;
|
|
20
|
+
};
|
|
21
|
+
"persona:removed": {
|
|
22
|
+
path: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* File watcher for workflows and personas
|
|
27
|
+
*/
|
|
28
|
+
export declare class Watcher extends EventEmitter {
|
|
29
|
+
private workflowsDir;
|
|
30
|
+
private personasDir;
|
|
31
|
+
private workflowWatcher;
|
|
32
|
+
private personaWatcher;
|
|
33
|
+
private running;
|
|
34
|
+
constructor(workflowsDir: string, personasDir: string);
|
|
35
|
+
/**
|
|
36
|
+
* Start watching for file changes
|
|
37
|
+
*/
|
|
38
|
+
start(): void;
|
|
39
|
+
/**
|
|
40
|
+
* Stop watching
|
|
41
|
+
*/
|
|
42
|
+
stop(): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Check if watcher is running
|
|
45
|
+
*/
|
|
46
|
+
isRunning(): boolean;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../../src/daemon/lib/watcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,kBAAkB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,kBAAkB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,eAAe,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,iBAAiB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,iBAAiB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACrC;AAED;;GAEG;AACH,qBAAa,OAAQ,SAAQ,YAAY;IAMrC,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,WAAW;IANrB,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,OAAO,CAAS;gBAGd,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM;IAK7B;;OAEG;IACH,KAAK,IAAI,IAAI;IAyCb;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B;;OAEG;IACH,SAAS,IAAI,OAAO;CAGrB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { watch } from "chokidar";
|
|
2
|
+
import { EventEmitter } from "node:events";
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
/**
|
|
5
|
+
* File watcher for workflows and personas
|
|
6
|
+
*/
|
|
7
|
+
export class Watcher extends EventEmitter {
|
|
8
|
+
workflowsDir;
|
|
9
|
+
personasDir;
|
|
10
|
+
workflowWatcher = null;
|
|
11
|
+
personaWatcher = null;
|
|
12
|
+
running = false;
|
|
13
|
+
constructor(workflowsDir, personasDir) {
|
|
14
|
+
super();
|
|
15
|
+
this.workflowsDir = workflowsDir;
|
|
16
|
+
this.personasDir = personasDir;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Start watching for file changes
|
|
20
|
+
*/
|
|
21
|
+
start() {
|
|
22
|
+
if (this.running)
|
|
23
|
+
return;
|
|
24
|
+
this.running = true;
|
|
25
|
+
// Watch workflows
|
|
26
|
+
this.workflowWatcher = watch(`${this.workflowsDir}/**/WORKFLOW.md`, {
|
|
27
|
+
ignoreInitial: true,
|
|
28
|
+
persistent: true,
|
|
29
|
+
});
|
|
30
|
+
this.workflowWatcher.on("add", (path) => {
|
|
31
|
+
this.emit("workflow:added", { path: dirname(path) });
|
|
32
|
+
});
|
|
33
|
+
this.workflowWatcher.on("change", (path) => {
|
|
34
|
+
this.emit("workflow:changed", { path: dirname(path) });
|
|
35
|
+
});
|
|
36
|
+
this.workflowWatcher.on("unlink", (path) => {
|
|
37
|
+
this.emit("workflow:removed", { path: dirname(path) });
|
|
38
|
+
});
|
|
39
|
+
// Watch personas
|
|
40
|
+
this.personaWatcher = watch(`${this.personasDir}/**/PERSONA.md`, {
|
|
41
|
+
ignoreInitial: true,
|
|
42
|
+
persistent: true,
|
|
43
|
+
});
|
|
44
|
+
this.personaWatcher.on("add", (path) => {
|
|
45
|
+
this.emit("persona:added", { path: dirname(path) });
|
|
46
|
+
});
|
|
47
|
+
this.personaWatcher.on("change", (path) => {
|
|
48
|
+
this.emit("persona:changed", { path: dirname(path) });
|
|
49
|
+
});
|
|
50
|
+
this.personaWatcher.on("unlink", (path) => {
|
|
51
|
+
this.emit("persona:removed", { path: dirname(path) });
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Stop watching
|
|
56
|
+
*/
|
|
57
|
+
async stop() {
|
|
58
|
+
if (!this.running)
|
|
59
|
+
return;
|
|
60
|
+
this.running = false;
|
|
61
|
+
if (this.workflowWatcher) {
|
|
62
|
+
await this.workflowWatcher.close();
|
|
63
|
+
this.workflowWatcher = null;
|
|
64
|
+
}
|
|
65
|
+
if (this.personaWatcher) {
|
|
66
|
+
await this.personaWatcher.close();
|
|
67
|
+
this.personaWatcher = null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Check if watcher is running
|
|
72
|
+
*/
|
|
73
|
+
isRunning() {
|
|
74
|
+
return this.running;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../src/daemon/lib/watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DotAgentsConfig } from "./types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Find .agents directory by searching up the directory tree
|
|
4
|
+
*/
|
|
5
|
+
export declare function findAgentsDir(startDir?: string): Promise<string | null>;
|
|
6
|
+
/**
|
|
7
|
+
* Get the configuration for dot-agents
|
|
8
|
+
*/
|
|
9
|
+
export declare function getConfig(startDir?: string): Promise<DotAgentsConfig | null>;
|
|
10
|
+
/**
|
|
11
|
+
* Get configuration or throw if not found
|
|
12
|
+
*/
|
|
13
|
+
export declare function requireConfig(startDir?: string): Promise<DotAgentsConfig>;
|
|
14
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAuBxD;;GAEG;AACH,wBAAsB,aAAa,CACjC,QAAQ,GAAE,MAAsB,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2BxB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAcjC;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAU/E"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { stat } from "node:fs/promises";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
/**
|
|
5
|
+
* Default directory names
|
|
6
|
+
*/
|
|
7
|
+
const AGENTS_DIR = ".agents";
|
|
8
|
+
const PERSONAS_DIR = "personas";
|
|
9
|
+
const WORKFLOWS_DIR = "workflows";
|
|
10
|
+
const SKILLS_DIR = "skills";
|
|
11
|
+
const SESSIONS_DIR = "sessions";
|
|
12
|
+
/**
|
|
13
|
+
* Check if a directory exists
|
|
14
|
+
*/
|
|
15
|
+
async function dirExists(path) {
|
|
16
|
+
try {
|
|
17
|
+
const stats = await stat(path);
|
|
18
|
+
return stats.isDirectory();
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Find .agents directory by searching up the directory tree
|
|
26
|
+
*/
|
|
27
|
+
export async function findAgentsDir(startDir = process.cwd()) {
|
|
28
|
+
let currentDir = resolve(startDir);
|
|
29
|
+
const root = resolve("/");
|
|
30
|
+
while (currentDir !== root) {
|
|
31
|
+
const agentsPath = join(currentDir, AGENTS_DIR);
|
|
32
|
+
if (await dirExists(agentsPath)) {
|
|
33
|
+
return agentsPath;
|
|
34
|
+
}
|
|
35
|
+
// Also check if current dir contains personas/workflows directly (dev mode)
|
|
36
|
+
const personasDir = join(currentDir, PERSONAS_DIR);
|
|
37
|
+
const workflowsDir = join(currentDir, WORKFLOWS_DIR);
|
|
38
|
+
if ((await dirExists(personasDir)) || (await dirExists(workflowsDir))) {
|
|
39
|
+
return currentDir;
|
|
40
|
+
}
|
|
41
|
+
currentDir = resolve(currentDir, "..");
|
|
42
|
+
}
|
|
43
|
+
// Check home directory as fallback
|
|
44
|
+
const homeAgents = join(homedir(), AGENTS_DIR);
|
|
45
|
+
if (await dirExists(homeAgents)) {
|
|
46
|
+
return homeAgents;
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get the configuration for dot-agents
|
|
52
|
+
*/
|
|
53
|
+
export async function getConfig(startDir) {
|
|
54
|
+
const agentsDir = await findAgentsDir(startDir);
|
|
55
|
+
if (!agentsDir) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
agentsDir,
|
|
60
|
+
personasDir: join(agentsDir, PERSONAS_DIR),
|
|
61
|
+
workflowsDir: join(agentsDir, WORKFLOWS_DIR),
|
|
62
|
+
skillsDir: join(agentsDir, SKILLS_DIR),
|
|
63
|
+
sessionsDir: join(agentsDir, SESSIONS_DIR),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get configuration or throw if not found
|
|
68
|
+
*/
|
|
69
|
+
export async function requireConfig(startDir) {
|
|
70
|
+
const config = await getConfig(startDir);
|
|
71
|
+
if (!config) {
|
|
72
|
+
throw new Error("No .agents directory found. Run from a directory with .agents/ or create one.");
|
|
73
|
+
}
|
|
74
|
+
return config;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC;;GAEG;AACH,MAAM,UAAU,GAAG,SAAS,CAAC;AAC7B,MAAM,YAAY,GAAG,UAAU,CAAC;AAChC,MAAM,aAAa,GAAG,WAAW,CAAC;AAClC,MAAM,UAAU,GAAG,QAAQ,CAAC;AAC5B,MAAM,YAAY,GAAG,UAAU,CAAC;AAEhC;;GAEG;AACH,KAAK,UAAU,SAAS,CAAC,IAAY;IACnC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,WAAmB,OAAO,CAAC,GAAG,EAAE;IAEhC,IAAI,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1B,OAAO,UAAU,KAAK,IAAI,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAChD,IAAI,MAAM,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;YAChC,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,4EAA4E;QAC5E,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YACtE,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,mCAAmC;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;IAC/C,IAAI,MAAM,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,QAAiB;IAEjB,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAEhD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,SAAS;QACT,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;QAC1C,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC;QAC5C,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;QACtC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAiB;IACnD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result of parsing a markdown file with YAML frontmatter
|
|
3
|
+
*/
|
|
4
|
+
export interface ParsedMarkdown<T> {
|
|
5
|
+
/** Parsed YAML frontmatter */
|
|
6
|
+
frontmatter: T;
|
|
7
|
+
/** Markdown body content (after frontmatter) */
|
|
8
|
+
body: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Parse YAML frontmatter from a markdown file
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseFrontmatter<T>(content: string): ParsedMarkdown<T>;
|
|
14
|
+
/**
|
|
15
|
+
* Load and parse a markdown file with YAML frontmatter
|
|
16
|
+
*/
|
|
17
|
+
export declare function loadMarkdownFile<T>(filePath: string): Promise<ParsedMarkdown<T>>;
|
|
18
|
+
//# sourceMappingURL=frontmatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/lib/frontmatter.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,8BAA8B;IAC9B,WAAW,EAAE,CAAC,CAAC;IACf,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAetE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAG5B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { parse as parseYaml } from "yaml";
|
|
3
|
+
/**
|
|
4
|
+
* Parse YAML frontmatter from a markdown file
|
|
5
|
+
*/
|
|
6
|
+
export function parseFrontmatter(content) {
|
|
7
|
+
const frontmatterRegex = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/;
|
|
8
|
+
const match = content.match(frontmatterRegex);
|
|
9
|
+
if (!match) {
|
|
10
|
+
throw new Error("No YAML frontmatter found");
|
|
11
|
+
}
|
|
12
|
+
const [, yamlContent, body] = match;
|
|
13
|
+
const frontmatter = parseYaml(yamlContent);
|
|
14
|
+
return {
|
|
15
|
+
frontmatter,
|
|
16
|
+
body: body.trim(),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Load and parse a markdown file with YAML frontmatter
|
|
21
|
+
*/
|
|
22
|
+
export async function loadMarkdownFile(filePath) {
|
|
23
|
+
const content = await readFile(filePath, "utf-8");
|
|
24
|
+
return parseFrontmatter(content);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=frontmatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/lib/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAY1C;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAI,OAAe;IACjD,MAAM,gBAAgB,GAAG,6CAA6C,CAAC;IACvE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAE9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;IACpC,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAM,CAAC;IAEhD,OAAO;QACL,WAAW;QACX,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;KAClB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAgB;IAEhB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,OAAO,gBAAgB,CAAI,OAAO,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AAGjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Types
|
|
2
|
+
export * from "./types/index.js";
|
|
3
|
+
// Library functions
|
|
4
|
+
export * from "./frontmatter.js";
|
|
5
|
+
export * from "./persona.js";
|
|
6
|
+
export * from "./workflow.js";
|
|
7
|
+
export * from "./variables.js";
|
|
8
|
+
export * from "./config.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,kBAAkB,CAAC;AAEjC,oBAAoB;AACpB,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Persona, ResolvedPersona } from "./types/persona.js";
|
|
2
|
+
/**
|
|
3
|
+
* Load a single persona file
|
|
4
|
+
*/
|
|
5
|
+
export declare function loadPersona(personaPath: string): Promise<Persona>;
|
|
6
|
+
/**
|
|
7
|
+
* Build the inheritance chain for a persona path
|
|
8
|
+
* Returns paths from root to leaf (e.g., ["claude", "claude/autonomous"])
|
|
9
|
+
*/
|
|
10
|
+
export declare function buildInheritanceChain(personaPath: string, personasRoot: string): string[];
|
|
11
|
+
/**
|
|
12
|
+
* Merge arrays with gitignore-style negation support
|
|
13
|
+
* Items prefixed with ! remove matching items from the array
|
|
14
|
+
*/
|
|
15
|
+
export declare function mergeArraysWithNegation(parent: string[], child: string[]): string[];
|
|
16
|
+
/**
|
|
17
|
+
* Deep merge two objects (child overrides parent)
|
|
18
|
+
*/
|
|
19
|
+
export declare function deepMerge<T extends Record<string, unknown>>(parent: T, child: Partial<T>): T;
|
|
20
|
+
/**
|
|
21
|
+
* Merge two personas (child inherits from parent)
|
|
22
|
+
*/
|
|
23
|
+
export declare function mergePersonas(parent: Persona, child: Persona): Persona;
|
|
24
|
+
/**
|
|
25
|
+
* Resolve a persona with full inheritance chain
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolvePersona(personaPath: string, personasRoot: string): Promise<ResolvedPersona>;
|
|
28
|
+
/**
|
|
29
|
+
* List all personas in a directory (recursive)
|
|
30
|
+
*/
|
|
31
|
+
export declare function listPersonas(personasRoot: string): Promise<string[]>;
|
|
32
|
+
//# sourceMappingURL=persona.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona.d.ts","sourceRoot":"","sources":["../../src/lib/persona.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,OAAO,EAEP,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAI5B;;GAEG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBvE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,CAaV;AAeD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,MAAM,EAAE,GACd,MAAM,EAAE,CAkBV;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAChB,CAAC,CA4BH;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAkBtE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,eAAe,CAAC,CAoC1B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAuB1E"}
|