dot-agents 0.2.0 → 0.3.1
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/README.md +151 -7
- package/dist/cli/commands/check.d.ts +3 -0
- package/dist/cli/commands/check.d.ts.map +1 -0
- package/dist/cli/commands/check.js +152 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +1 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +58 -52
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/list.d.ts.map +1 -1
- package/dist/cli/commands/list.js +21 -7
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/index.js +3 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +2 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/validation/cron.d.ts +29 -0
- package/dist/lib/validation/cron.d.ts.map +1 -0
- package/dist/lib/validation/cron.js +159 -0
- package/dist/lib/validation/cron.js.map +1 -0
- package/dist/lib/validation/index.d.ts +18 -0
- package/dist/lib/validation/index.d.ts.map +1 -0
- package/dist/lib/validation/index.js +135 -0
- package/dist/lib/validation/index.js.map +1 -0
- package/dist/lib/validation/persona.d.ts +9 -0
- package/dist/lib/validation/persona.d.ts.map +1 -0
- package/dist/lib/validation/persona.js +143 -0
- package/dist/lib/validation/persona.js.map +1 -0
- package/dist/lib/validation/types.d.ts +64 -0
- package/dist/lib/validation/types.d.ts.map +1 -0
- package/dist/lib/validation/types.js +25 -0
- package/dist/lib/validation/types.js.map +1 -0
- package/dist/lib/validation/workflow.d.ts +10 -0
- package/dist/lib/validation/workflow.d.ts.map +1 -0
- package/dist/lib/validation/workflow.js +242 -0
- package/dist/lib/validation/workflow.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -263,6 +263,7 @@ dot-agents [command]
|
|
|
263
263
|
|
|
264
264
|
Commands:
|
|
265
265
|
init Initialize or migrate a .agents directory
|
|
266
|
+
check [type] Validate workflows and personas
|
|
266
267
|
run <workflow> Run a workflow
|
|
267
268
|
list [workflows|personas] List resources
|
|
268
269
|
show workflow <name> Show workflow details
|
|
@@ -304,28 +305,85 @@ dot-agents show persona claude/autonomous/productivity
|
|
|
304
305
|
dot-agents show workflow daily-standup --prompt
|
|
305
306
|
```
|
|
306
307
|
|
|
308
|
+
### Validating Configuration
|
|
309
|
+
|
|
310
|
+
The `check` command validates your workflows and personas, catching common issues like:
|
|
311
|
+
|
|
312
|
+
- Missing required fields (`name`, `description`, `persona`)
|
|
313
|
+
- Invalid trigger configurations (wrong `schedule` format)
|
|
314
|
+
- Unknown fields (suggesting correct alternatives)
|
|
315
|
+
- Invalid cron expressions
|
|
316
|
+
- Missing persona references
|
|
317
|
+
|
|
318
|
+
```bash
|
|
319
|
+
# Check everything
|
|
320
|
+
dot-agents check
|
|
321
|
+
|
|
322
|
+
# Check only workflows
|
|
323
|
+
dot-agents check workflows
|
|
324
|
+
|
|
325
|
+
# Check only personas
|
|
326
|
+
dot-agents check personas
|
|
327
|
+
|
|
328
|
+
# JSON output (for CI/scripts)
|
|
329
|
+
dot-agents check --json
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
Example output:
|
|
333
|
+
|
|
334
|
+
```text
|
|
335
|
+
Checking workflows...
|
|
336
|
+
✓ hello-world
|
|
337
|
+
○ daily-standup
|
|
338
|
+
⚠ warning: Unknown field 'schedule' [schedule]
|
|
339
|
+
hint: Did you mean 'on.schedule'?
|
|
340
|
+
✗ broken-workflow
|
|
341
|
+
✗ error: Missing required 'persona' field
|
|
342
|
+
hint: Add: persona: claude
|
|
343
|
+
|
|
344
|
+
Summary:
|
|
345
|
+
Workflows: 2/3 valid
|
|
346
|
+
```
|
|
347
|
+
|
|
307
348
|
## Daemon
|
|
308
349
|
|
|
309
|
-
The daemon runs scheduled workflows in the background.
|
|
350
|
+
The daemon runs scheduled workflows in the background based on cron expressions.
|
|
351
|
+
|
|
352
|
+
### Running the Daemon
|
|
310
353
|
|
|
311
354
|
```bash
|
|
312
|
-
# Start
|
|
355
|
+
# Start in foreground (Ctrl+C to stop)
|
|
356
|
+
cd /path/to/project # Must contain .agents/
|
|
313
357
|
dot-agents daemon run
|
|
314
358
|
|
|
315
|
-
#
|
|
359
|
+
# Custom port
|
|
360
|
+
dot-agents daemon run -p 8080
|
|
361
|
+
|
|
362
|
+
# Disable file watching
|
|
363
|
+
dot-agents daemon run --no-watch
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
**Important:** The daemon must be run from a directory containing `.agents/` (or a subdirectory of one).
|
|
367
|
+
|
|
368
|
+
### Managing the Daemon
|
|
369
|
+
|
|
370
|
+
```bash
|
|
371
|
+
# Check if daemon is running
|
|
316
372
|
dot-agents daemon status
|
|
317
373
|
|
|
318
|
-
# View scheduled jobs
|
|
374
|
+
# View scheduled jobs and next run times
|
|
319
375
|
dot-agents daemon jobs
|
|
320
376
|
|
|
321
377
|
# Manually trigger a workflow
|
|
322
|
-
dot-agents daemon trigger
|
|
378
|
+
dot-agents daemon trigger my-workflow
|
|
323
379
|
|
|
324
|
-
# Reload workflows after
|
|
380
|
+
# Reload workflows after editing files
|
|
325
381
|
dot-agents daemon reload
|
|
326
382
|
```
|
|
327
383
|
|
|
328
|
-
|
|
384
|
+
### HTTP API
|
|
385
|
+
|
|
386
|
+
The daemon exposes an HTTP API on port 3141 (configurable with `-p`):
|
|
329
387
|
|
|
330
388
|
- `GET /health` - Health check
|
|
331
389
|
- `GET /status` - Daemon status and uptime
|
|
@@ -333,6 +391,92 @@ The daemon provides an HTTP API on port 3141 (configurable with `-p`):
|
|
|
333
391
|
- `POST /trigger/:workflow` - Trigger a workflow
|
|
334
392
|
- `POST /reload` - Reload workflows from disk
|
|
335
393
|
|
|
394
|
+
### Deploying on macOS (launchd)
|
|
395
|
+
|
|
396
|
+
For an always-on Mac server, use launchd to keep the daemon running:
|
|
397
|
+
|
|
398
|
+
1. Create a plist file at `~/Library/LaunchAgents/com.dot-agents.daemon.plist`:
|
|
399
|
+
|
|
400
|
+
```xml
|
|
401
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
402
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
403
|
+
<plist version="1.0">
|
|
404
|
+
<dict>
|
|
405
|
+
<key>Label</key>
|
|
406
|
+
<string>com.dot-agents.daemon</string>
|
|
407
|
+
<key>ProgramArguments</key>
|
|
408
|
+
<array>
|
|
409
|
+
<string>/usr/local/bin/npx</string>
|
|
410
|
+
<string>dot-agents</string>
|
|
411
|
+
<string>daemon</string>
|
|
412
|
+
<string>run</string>
|
|
413
|
+
</array>
|
|
414
|
+
<key>WorkingDirectory</key>
|
|
415
|
+
<string>/Users/YOUR_USERNAME/Documents</string>
|
|
416
|
+
<key>RunAtLoad</key>
|
|
417
|
+
<true/>
|
|
418
|
+
<key>KeepAlive</key>
|
|
419
|
+
<true/>
|
|
420
|
+
<key>StandardOutPath</key>
|
|
421
|
+
<string>/tmp/dot-agents.out.log</string>
|
|
422
|
+
<key>StandardErrorPath</key>
|
|
423
|
+
<string>/tmp/dot-agents.err.log</string>
|
|
424
|
+
<key>EnvironmentVariables</key>
|
|
425
|
+
<dict>
|
|
426
|
+
<key>PATH</key>
|
|
427
|
+
<string>/usr/local/bin:/usr/bin:/bin</string>
|
|
428
|
+
</dict>
|
|
429
|
+
</dict>
|
|
430
|
+
</plist>
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
2. Update the `WorkingDirectory` to point to your `.agents/` location.
|
|
434
|
+
|
|
435
|
+
3. Load and start the daemon:
|
|
436
|
+
|
|
437
|
+
```bash
|
|
438
|
+
# Load the service
|
|
439
|
+
launchctl load ~/Library/LaunchAgents/com.dot-agents.daemon.plist
|
|
440
|
+
|
|
441
|
+
# Check status
|
|
442
|
+
launchctl list | grep dot-agents
|
|
443
|
+
|
|
444
|
+
# View logs
|
|
445
|
+
tail -f /tmp/dot-agents.out.log
|
|
446
|
+
|
|
447
|
+
# Stop and unload
|
|
448
|
+
launchctl unload ~/Library/LaunchAgents/com.dot-agents.daemon.plist
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
### Workflow Schedule Format
|
|
452
|
+
|
|
453
|
+
For workflows to be scheduled, they need `on.schedule` with cron expressions:
|
|
454
|
+
|
|
455
|
+
```yaml
|
|
456
|
+
---
|
|
457
|
+
name: daily-report
|
|
458
|
+
description: Generate daily report
|
|
459
|
+
persona: claude
|
|
460
|
+
on:
|
|
461
|
+
schedule:
|
|
462
|
+
- cron: "0 9 * * *" # 9:00 AM daily
|
|
463
|
+
- cron: "0 17 * * 1-5" # 5:00 PM weekdays
|
|
464
|
+
manual: true # Also allow manual triggers
|
|
465
|
+
---
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
Common cron patterns:
|
|
469
|
+
|
|
470
|
+
| Pattern | Description |
|
|
471
|
+
| ------------- | ------------------- |
|
|
472
|
+
| `0 9 * * *` | Daily at 9:00 AM |
|
|
473
|
+
| `30 6 * * *` | Daily at 6:30 AM |
|
|
474
|
+
| `0 */3 * * *` | Every 3 hours |
|
|
475
|
+
| `0 9 * * 1-5` | Weekdays at 9:00 AM |
|
|
476
|
+
| `0 0 1 * *` | First of each month |
|
|
477
|
+
|
|
478
|
+
Use `dot-agents check` to validate your cron expressions.
|
|
479
|
+
|
|
336
480
|
## Directory Structure
|
|
337
481
|
|
|
338
482
|
```text
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsEpC,eAAO,MAAM,YAAY,SAiJrB,CAAC"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { relative } from "node:path";
|
|
4
|
+
import { getConfig } from "../../lib/config.js";
|
|
5
|
+
import { validateAll, validateAllWorkflows, validateAllPersonas, } from "../../lib/validation/index.js";
|
|
6
|
+
/**
|
|
7
|
+
* Format a single validation issue for display
|
|
8
|
+
*/
|
|
9
|
+
function formatIssue(issue, indent = " ") {
|
|
10
|
+
const icon = issue.severity === "error" ? chalk.red("✗") : chalk.yellow("⚠");
|
|
11
|
+
const prefix = issue.severity === "error" ? chalk.red("error") : chalk.yellow("warning");
|
|
12
|
+
let line = `${indent}${icon} ${prefix}: ${issue.message}`;
|
|
13
|
+
if (issue.path && issue.path !== "file" && issue.path !== "frontmatter") {
|
|
14
|
+
line += chalk.dim(` [${issue.path}]`);
|
|
15
|
+
}
|
|
16
|
+
if (issue.suggestion) {
|
|
17
|
+
line += `\n${indent} ${chalk.dim("hint:")} ${chalk.cyan(issue.suggestion)}`;
|
|
18
|
+
}
|
|
19
|
+
return line;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Format validation results for a resource type
|
|
23
|
+
*/
|
|
24
|
+
function formatResults(results, baseDir, resourceType) {
|
|
25
|
+
const lines = [];
|
|
26
|
+
if (results.length === 0) {
|
|
27
|
+
lines.push(chalk.yellow(` No ${resourceType} found`));
|
|
28
|
+
return lines;
|
|
29
|
+
}
|
|
30
|
+
for (const result of results) {
|
|
31
|
+
const relPath = relative(baseDir, result.path);
|
|
32
|
+
const displayName = result.name || relPath;
|
|
33
|
+
if (result.valid && result.issues.length === 0) {
|
|
34
|
+
lines.push(` ${chalk.green("✓")} ${displayName}`);
|
|
35
|
+
}
|
|
36
|
+
else if (result.valid) {
|
|
37
|
+
// Valid but has warnings
|
|
38
|
+
lines.push(` ${chalk.yellow("○")} ${displayName}`);
|
|
39
|
+
for (const issue of result.issues) {
|
|
40
|
+
lines.push(formatIssue(issue));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
lines.push(` ${chalk.red("✗")} ${displayName}`);
|
|
45
|
+
for (const issue of result.issues) {
|
|
46
|
+
lines.push(formatIssue(issue));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return lines;
|
|
51
|
+
}
|
|
52
|
+
export const checkCommand = new Command("check")
|
|
53
|
+
.description("Validate workflows and personas")
|
|
54
|
+
.argument("[type]", "Type to check: all (default), workflows, or personas", "all")
|
|
55
|
+
.option("-d, --dir <path>", "Directory to check", process.cwd())
|
|
56
|
+
.option("-q, --quiet", "Only show errors, no summary")
|
|
57
|
+
.option("--json", "Output results as JSON")
|
|
58
|
+
.action(async (type, options) => {
|
|
59
|
+
try {
|
|
60
|
+
const config = await getConfig(options.dir);
|
|
61
|
+
if (!config) {
|
|
62
|
+
console.error(chalk.red("No .agents directory found. Run 'dot-agents init' to create one."));
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
if (options.json) {
|
|
66
|
+
// JSON output mode
|
|
67
|
+
let results;
|
|
68
|
+
if (type === "workflows" || type === "w") {
|
|
69
|
+
results = {
|
|
70
|
+
workflows: await validateAllWorkflows(config.workflowsDir, config.personasDir),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
else if (type === "personas" || type === "p") {
|
|
74
|
+
results = {
|
|
75
|
+
personas: await validateAllPersonas(config.personasDir),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
results = await validateAll(config.agentsDir);
|
|
80
|
+
}
|
|
81
|
+
console.log(JSON.stringify(results, null, 2));
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
// Human-readable output
|
|
85
|
+
if (type === "workflows" || type === "w") {
|
|
86
|
+
const results = await validateAllWorkflows(config.workflowsDir, config.personasDir);
|
|
87
|
+
if (!options.quiet) {
|
|
88
|
+
console.log(chalk.blue("\nChecking workflows...\n"));
|
|
89
|
+
}
|
|
90
|
+
const lines = formatResults(results, config.workflowsDir, "workflows");
|
|
91
|
+
console.log(lines.join("\n"));
|
|
92
|
+
const valid = results.filter((r) => r.valid).length;
|
|
93
|
+
const total = results.length;
|
|
94
|
+
if (!options.quiet) {
|
|
95
|
+
console.log(`\n${valid === total ? chalk.green("✓") : chalk.red("✗")} ${valid}/${total} workflows valid\n`);
|
|
96
|
+
}
|
|
97
|
+
if (valid !== total) {
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else if (type === "personas" || type === "p") {
|
|
102
|
+
const results = await validateAllPersonas(config.personasDir);
|
|
103
|
+
if (!options.quiet) {
|
|
104
|
+
console.log(chalk.blue("\nChecking personas...\n"));
|
|
105
|
+
}
|
|
106
|
+
const lines = formatResults(results, config.personasDir, "personas");
|
|
107
|
+
console.log(lines.join("\n"));
|
|
108
|
+
const valid = results.filter((r) => r.valid).length;
|
|
109
|
+
const total = results.length;
|
|
110
|
+
if (!options.quiet) {
|
|
111
|
+
console.log(`\n${valid === total ? chalk.green("✓") : chalk.red("✗")} ${valid}/${total} personas valid\n`);
|
|
112
|
+
}
|
|
113
|
+
if (valid !== total) {
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
// Check all
|
|
119
|
+
const summary = await validateAll(config.agentsDir);
|
|
120
|
+
if (!options.quiet) {
|
|
121
|
+
console.log(chalk.blue("\nChecking personas...\n"));
|
|
122
|
+
}
|
|
123
|
+
const personaLines = formatResults(summary.personas.results, config.personasDir, "personas");
|
|
124
|
+
console.log(personaLines.join("\n"));
|
|
125
|
+
if (!options.quiet) {
|
|
126
|
+
console.log(chalk.blue("\nChecking workflows...\n"));
|
|
127
|
+
}
|
|
128
|
+
const workflowLines = formatResults(summary.workflows.results, config.workflowsDir, "workflows");
|
|
129
|
+
console.log(workflowLines.join("\n"));
|
|
130
|
+
// Summary
|
|
131
|
+
if (!options.quiet) {
|
|
132
|
+
console.log(chalk.blue("\nSummary:\n"));
|
|
133
|
+
console.log(` Personas: ${summary.personas.valid}/${summary.personas.total} valid`);
|
|
134
|
+
console.log(` Workflows: ${summary.workflows.valid}/${summary.workflows.total} valid`);
|
|
135
|
+
if (summary.valid) {
|
|
136
|
+
console.log(chalk.green("\n✓ All checks passed\n"));
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
console.log(chalk.red("\n✗ Validation failed\n"));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (!summary.valid) {
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
149
|
+
process.exit(1);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoSpC,eAAO,MAAM,WAAW,SA0CpB,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import chalk from "chalk";
|
|
3
|
-
import { mkdir, writeFile,
|
|
4
|
-
import { join } from "node:path";
|
|
3
|
+
import { mkdir, writeFile, stat } from "node:fs/promises";
|
|
4
|
+
import { join, relative } from "node:path";
|
|
5
5
|
import { createInterface } from "node:readline";
|
|
6
6
|
import { findAgentsDir } from "../../lib/config.js";
|
|
7
|
-
import {
|
|
7
|
+
import { validateAllWorkflows, validateAllPersonas, } from "../../lib/validation/index.js";
|
|
8
8
|
const AGENTS_DIR = ".agents";
|
|
9
9
|
const PERSONAS_DIR = "personas";
|
|
10
10
|
const WORKFLOWS_DIR = "workflows";
|
|
@@ -81,44 +81,35 @@ async function analyzeMigration(agentsDir) {
|
|
|
81
81
|
hasWorkflows: await dirExists(workflowsDir),
|
|
82
82
|
hasSkills: await dirExists(skillsDir),
|
|
83
83
|
hasSessions: await dirExists(sessionsDir),
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
personaResults: [],
|
|
85
|
+
workflowResults: [],
|
|
86
86
|
};
|
|
87
|
-
//
|
|
87
|
+
// Validate personas
|
|
88
88
|
if (status.hasPersonas) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
const personaFile = join(personasDir, entry, "PERSONA.md");
|
|
93
|
-
return fileExists(personaFile);
|
|
94
|
-
}));
|
|
95
|
-
status.hasPersonas = hasPersonaFiles.some(Boolean);
|
|
96
|
-
}
|
|
97
|
-
catch {
|
|
98
|
-
status.hasPersonas = false;
|
|
99
|
-
}
|
|
89
|
+
status.personaResults = await validateAllPersonas(personasDir);
|
|
90
|
+
// Update hasPersonas based on whether any valid personas exist
|
|
91
|
+
status.hasPersonas = status.personaResults.some((r) => r.valid);
|
|
100
92
|
}
|
|
101
|
-
//
|
|
93
|
+
// Validate workflows
|
|
102
94
|
if (status.hasWorkflows) {
|
|
103
|
-
|
|
104
|
-
const workflowPaths = await listWorkflows(workflowsDir);
|
|
105
|
-
for (const workflowPath of workflowPaths) {
|
|
106
|
-
try {
|
|
107
|
-
await loadWorkflow(workflowPath);
|
|
108
|
-
status.validWorkflows.push(workflowPath);
|
|
109
|
-
}
|
|
110
|
-
catch {
|
|
111
|
-
// Workflow exists but doesn't meet requirements
|
|
112
|
-
status.workflowsNeedingMigration.push(workflowPath);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
catch {
|
|
117
|
-
// Ignore errors
|
|
118
|
-
}
|
|
95
|
+
status.workflowResults = await validateAllWorkflows(workflowsDir, status.hasPersonas ? personasDir : undefined);
|
|
119
96
|
}
|
|
120
97
|
return status;
|
|
121
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Format a validation issue for display
|
|
101
|
+
*/
|
|
102
|
+
function formatIssue(issue) {
|
|
103
|
+
const icon = issue.severity === "error" ? chalk.red("✗") : chalk.yellow("⚠");
|
|
104
|
+
let line = ` ${icon} ${issue.message}`;
|
|
105
|
+
if (issue.path && issue.path !== "file" && issue.path !== "frontmatter") {
|
|
106
|
+
line += chalk.dim(` [${issue.path}]`);
|
|
107
|
+
}
|
|
108
|
+
if (issue.suggestion) {
|
|
109
|
+
line += `\n ${chalk.dim("→")} ${chalk.cyan(issue.suggestion)}`;
|
|
110
|
+
}
|
|
111
|
+
return line;
|
|
112
|
+
}
|
|
122
113
|
async function freshInstall(targetDir) {
|
|
123
114
|
const agentsDir = join(targetDir, AGENTS_DIR);
|
|
124
115
|
console.log(chalk.blue("\nCreating .agents directory structure...\n"));
|
|
@@ -153,24 +144,31 @@ async function freshInstall(targetDir) {
|
|
|
153
144
|
async function migrate(agentsDir) {
|
|
154
145
|
console.log(chalk.blue("\nAnalyzing existing .agents directory...\n"));
|
|
155
146
|
const status = await analyzeMigration(agentsDir);
|
|
147
|
+
const workflowsDir = join(agentsDir, WORKFLOWS_DIR);
|
|
156
148
|
// Report current state
|
|
157
149
|
console.log("Current structure:");
|
|
158
150
|
console.log(` ${status.hasPersonas ? chalk.green("✓") : chalk.red("✗")} personas/`);
|
|
159
151
|
console.log(` ${status.hasWorkflows ? chalk.green("✓") : chalk.yellow("○")} workflows/`);
|
|
160
152
|
console.log(` ${status.hasSkills ? chalk.green("✓") : chalk.dim("○")} skills/`);
|
|
161
153
|
console.log(` ${status.hasSessions ? chalk.green("✓") : chalk.dim("○")} sessions/`);
|
|
162
|
-
//
|
|
163
|
-
|
|
164
|
-
|
|
154
|
+
// Count valid vs invalid workflows
|
|
155
|
+
const validWorkflows = status.workflowResults.filter((r) => r.valid);
|
|
156
|
+
const invalidWorkflows = status.workflowResults.filter((r) => !r.valid);
|
|
157
|
+
const workflowsWithWarnings = status.workflowResults.filter((r) => r.valid && r.issues.length > 0);
|
|
158
|
+
if (validWorkflows.length > 0) {
|
|
159
|
+
console.log(chalk.green(`\n ${validWorkflows.length} valid workflow(s)`));
|
|
160
|
+
}
|
|
161
|
+
if (workflowsWithWarnings.length > 0) {
|
|
162
|
+
console.log(chalk.yellow(` ${workflowsWithWarnings.length} workflow(s) with warnings`));
|
|
165
163
|
}
|
|
166
|
-
if (
|
|
167
|
-
console.log(chalk.
|
|
164
|
+
if (invalidWorkflows.length > 0) {
|
|
165
|
+
console.log(chalk.red(` ${invalidWorkflows.length} workflow(s) with errors`));
|
|
168
166
|
}
|
|
169
167
|
let needsAction = false;
|
|
170
168
|
// Create personas directory if missing
|
|
171
169
|
if (!status.hasPersonas) {
|
|
172
170
|
needsAction = true;
|
|
173
|
-
console.log(chalk.yellow("\n⚠ No personas found."));
|
|
171
|
+
console.log(chalk.yellow("\n⚠ No valid personas found."));
|
|
174
172
|
const createPersona = await confirm("Create default 'claude' persona?");
|
|
175
173
|
if (createPersona) {
|
|
176
174
|
const personaDir = join(agentsDir, PERSONAS_DIR, DEFAULT_PERSONA_NAME);
|
|
@@ -180,25 +178,33 @@ async function migrate(agentsDir) {
|
|
|
180
178
|
console.log(chalk.green(` Created ${personaPath}`));
|
|
181
179
|
}
|
|
182
180
|
}
|
|
183
|
-
// Report workflow
|
|
184
|
-
|
|
181
|
+
// Report workflow issues with detailed validation feedback
|
|
182
|
+
const workflowsWithIssues = status.workflowResults.filter((r) => r.issues.length > 0);
|
|
183
|
+
if (workflowsWithIssues.length > 0) {
|
|
185
184
|
needsAction = true;
|
|
186
|
-
console.log(chalk.yellow("\n⚠
|
|
187
|
-
for (const
|
|
188
|
-
|
|
185
|
+
console.log(chalk.yellow("\n⚠ Workflow issues found:\n"));
|
|
186
|
+
for (const result of workflowsWithIssues) {
|
|
187
|
+
const relPath = relative(workflowsDir, result.path);
|
|
188
|
+
const displayName = result.name || relPath;
|
|
189
|
+
const hasErrors = result.issues.some((i) => i.severity === "error");
|
|
190
|
+
if (hasErrors) {
|
|
191
|
+
console.log(` ${chalk.red("✗")} ${displayName}`);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
console.log(` ${chalk.yellow("○")} ${displayName}`);
|
|
195
|
+
}
|
|
196
|
+
for (const issue of result.issues) {
|
|
197
|
+
console.log(formatIssue(issue));
|
|
198
|
+
}
|
|
199
|
+
console.log();
|
|
189
200
|
}
|
|
190
|
-
console.log(chalk.dim("\nRequired changes for each workflow:"));
|
|
191
|
-
console.log(chalk.dim(" 1. Add 'description:' field (rename from 'goal:' if present)"));
|
|
192
|
-
console.log(chalk.dim(" 2. Add 'persona: claude' field"));
|
|
193
|
-
console.log(chalk.dim(" 3. Move 'skills_used:' to persona if present"));
|
|
194
201
|
}
|
|
195
202
|
if (!needsAction) {
|
|
196
203
|
console.log(chalk.green("\n✓ Your .agents directory is already set up!"));
|
|
197
204
|
}
|
|
198
205
|
else {
|
|
199
|
-
console.log(chalk.blue("
|
|
200
|
-
console.log(chalk.dim(" dot-agents
|
|
201
|
-
console.log(chalk.dim(" dot-agents list personas"));
|
|
206
|
+
console.log(chalk.blue("After making changes, verify with:"));
|
|
207
|
+
console.log(chalk.dim(" dot-agents check"));
|
|
202
208
|
}
|
|
203
209
|
}
|
|
204
210
|
export const initCommand = new Command("init")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,WAAW,SAyHpB,CAAC"}
|