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
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 @tnez
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# .agents Directory
|
|
2
|
+
|
|
3
|
+
A curated collection of agent capabilities including skills, workflows, and tooling for building agentic projects.
|
|
4
|
+
|
|
5
|
+
## What is the .agents Directory?
|
|
6
|
+
|
|
7
|
+
The `.agents/` directory is a standardized location for agent-related resources in your project. It provides a consistent structure for:
|
|
8
|
+
|
|
9
|
+
- **Skills** - Focused, reusable capabilities (convert markdown to PDF, validate YAML, etc.)
|
|
10
|
+
- **Workflows** - Multi-step orchestrations that compose skills and tools
|
|
11
|
+
- **Meta-tooling** - Tools for creating, testing, and managing agent capabilities
|
|
12
|
+
|
|
13
|
+
Think of it as your project's "agent workspace" - everything your AI agent needs to work effectively on your codebase.
|
|
14
|
+
|
|
15
|
+
## Directory Structure
|
|
16
|
+
|
|
17
|
+
When consumed, this repository installs to your project's `.agents/` directory:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
.agents/
|
|
21
|
+
├── skills/ # Focused, reusable capabilities
|
|
22
|
+
│ ├── meta/ # Tools for skill management
|
|
23
|
+
│ ├── examples/ # Example implementations
|
|
24
|
+
│ └── documents/ # Document processing
|
|
25
|
+
└── workflows/ # Multi-step orchestrations
|
|
26
|
+
└── examples/ # Example workflows
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Installation
|
|
30
|
+
|
|
31
|
+
### The Agentic Way (Recommended)
|
|
32
|
+
|
|
33
|
+
This repository is designed for **agentic installation** - your AI agent can install resources directly without scripts or package managers.
|
|
34
|
+
|
|
35
|
+
Simply tell your agent:
|
|
36
|
+
|
|
37
|
+
```text
|
|
38
|
+
"Install find-local-events skill from tnez/dot-agents"
|
|
39
|
+
"Install skills from tnez/dot-agents"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Your agent will:
|
|
43
|
+
|
|
44
|
+
1. Fetch the files from GitHub
|
|
45
|
+
2. Detect your `.agents/` directory (or ask where to install)
|
|
46
|
+
3. Map repository structure to installation location:
|
|
47
|
+
- `skills/` → `.agents/skills/`
|
|
48
|
+
- `workflows/` → `.agents/workflows/`
|
|
49
|
+
4. Verify installation
|
|
50
|
+
|
|
51
|
+
**No npm, pip, or bash scripts required** - your agent handles everything using its built-in capabilities.
|
|
52
|
+
|
|
53
|
+
### Discovery & Updates
|
|
54
|
+
|
|
55
|
+
Browse available resources:
|
|
56
|
+
|
|
57
|
+
```text
|
|
58
|
+
"Browse skills in tnez/dot-agents"
|
|
59
|
+
"What workflows are available?"
|
|
60
|
+
"Show me document-related skills"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Check for updates:
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
"Check for updates to my installed skills"
|
|
67
|
+
"Update skill-installer"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
See [CATALOG.md](CATALOG.md) for the complete list.
|
|
71
|
+
|
|
72
|
+
### How It Works
|
|
73
|
+
|
|
74
|
+
Your agent uses meta-skills from this repository:
|
|
75
|
+
|
|
76
|
+
- **skill-installer**: Fetches and installs skills from GitHub
|
|
77
|
+
- **skill-browser**: Discovers available skills and workflows
|
|
78
|
+
|
|
79
|
+
Both are pure agentic - they teach your agent HOW to install, rather than providing scripts to run.
|
|
80
|
+
|
|
81
|
+
### Installation Locations
|
|
82
|
+
|
|
83
|
+
Resources install to these locations (in priority order):
|
|
84
|
+
|
|
85
|
+
1. `.agents/` - Project-level, agent-agnostic (preferred)
|
|
86
|
+
2. `.claude/` - Project-level, Claude-specific
|
|
87
|
+
3. `~/.agents/` - Global, agent-agnostic
|
|
88
|
+
4. `~/.claude/` - Global, Claude-specific
|
|
89
|
+
|
|
90
|
+
Your agent will auto-detect or ask where to install.
|
|
91
|
+
|
|
92
|
+
## Repository Development Structure
|
|
93
|
+
|
|
94
|
+
```text
|
|
95
|
+
worktrees/main/
|
|
96
|
+
├── CATALOG.md # Machine-readable catalog
|
|
97
|
+
├── skills/ # → .agents/skills/ when consumed
|
|
98
|
+
│ ├── meta/ # Skill management tools
|
|
99
|
+
│ │ ├── skill-installer/
|
|
100
|
+
│ │ ├── skill-browser/
|
|
101
|
+
│ │ ├── skill-creator/
|
|
102
|
+
│ │ ├── skill-tester/
|
|
103
|
+
│ │ └── skill-evaluator/
|
|
104
|
+
│ ├── examples/ # Example implementations
|
|
105
|
+
│ │ ├── find-local-events/
|
|
106
|
+
│ │ ├── get-weather/
|
|
107
|
+
│ │ └── simple-task/
|
|
108
|
+
│ └── documents/ # Document processing
|
|
109
|
+
│ ├── image-review-pdf/
|
|
110
|
+
│ └── markdown-to-pdf/
|
|
111
|
+
└── workflows/ # → .agents/workflows/ when consumed
|
|
112
|
+
├── README.md
|
|
113
|
+
└── examples/
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Quick Start
|
|
117
|
+
|
|
118
|
+
### For Agents
|
|
119
|
+
|
|
120
|
+
Resources are loaded automatically when relevant to your task. Each provides:
|
|
121
|
+
|
|
122
|
+
- Clear instructions for when and how to use it
|
|
123
|
+
- Templates and examples
|
|
124
|
+
- Validation and testing tools
|
|
125
|
+
|
|
126
|
+
### For Humans
|
|
127
|
+
|
|
128
|
+
1. **Browse skills**: Explore `skills/` directory
|
|
129
|
+
2. **Browse workflows**: Explore `workflows/` directory
|
|
130
|
+
3. **Use meta-skills**: Leverage skill-creator, skill-tester, skill-evaluator
|
|
131
|
+
4. **Create custom resources**: Follow specifications in each directory's README
|
|
132
|
+
5. **See development workflows**: Check WORKFLOWS.md for development patterns
|
|
133
|
+
|
|
134
|
+
## Skills
|
|
135
|
+
|
|
136
|
+
Skills are focused, reusable capabilities that agents load dynamically. Each skill is a self-contained directory with:
|
|
137
|
+
|
|
138
|
+
- `SKILL.md` - Required markdown file with YAML frontmatter and instructions
|
|
139
|
+
- `CONTEXT.md` - Optional user/project-specific context and customizations
|
|
140
|
+
- Optional supporting files (scripts, templates, assets, references)
|
|
141
|
+
|
|
142
|
+
**Format**:
|
|
143
|
+
|
|
144
|
+
```markdown
|
|
145
|
+
---
|
|
146
|
+
name: skill-name
|
|
147
|
+
description: What the skill does and when to use it
|
|
148
|
+
license: MIT
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
# Skill Instructions
|
|
152
|
+
|
|
153
|
+
Imperative instructions for the agent...
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**CONTEXT.md Pattern**: Co-locate a `CONTEXT.md` file with any `SKILL.md` to inject user or project-specific context. The skill remains general and reusable while `CONTEXT.md` provides customization. This file is preserved during skill updates.
|
|
157
|
+
|
|
158
|
+
See [Agent Skills Specification](https://github.com/anthropics/skills/blob/main/agent_skills_spec.md) for details.
|
|
159
|
+
|
|
160
|
+
## Workflows
|
|
161
|
+
|
|
162
|
+
Workflows are multi-step orchestrations that compose skills, tools, and agent behaviors. They handle complex tasks requiring:
|
|
163
|
+
|
|
164
|
+
- Multiple phases or steps
|
|
165
|
+
- Decision making and conditionals
|
|
166
|
+
- Coordination of multiple skills
|
|
167
|
+
- Standardized procedures
|
|
168
|
+
|
|
169
|
+
See `workflows/README.md` for details on creating workflows.
|
|
170
|
+
|
|
171
|
+
## Meta-Skills
|
|
172
|
+
|
|
173
|
+
### skill-installer ⭐
|
|
174
|
+
|
|
175
|
+
Pure agentic skill installation from GitHub repositories. Features:
|
|
176
|
+
|
|
177
|
+
- Zero dependencies (uses WebFetch, Bash, Write, Glob)
|
|
178
|
+
- Smart semantic merging for updates
|
|
179
|
+
- CONTEXT.md preservation for user customizations
|
|
180
|
+
- Auto-detects installation location
|
|
181
|
+
|
|
182
|
+
**New paradigm**: Your agent installs skills, not scripts.
|
|
183
|
+
|
|
184
|
+
### skill-browser ⭐
|
|
185
|
+
|
|
186
|
+
Discover and browse available skills. Features:
|
|
187
|
+
|
|
188
|
+
- Reads CATALOG.md to show available resources
|
|
189
|
+
- Compares with local installation
|
|
190
|
+
- Identifies updates and new additions
|
|
191
|
+
- Filters by category or relevance
|
|
192
|
+
|
|
193
|
+
**Usage**: "Browse skills in tnez/dot-agents" or "What's new?"
|
|
194
|
+
|
|
195
|
+
### skill-creator
|
|
196
|
+
|
|
197
|
+
Scaffold new skills with proper structure and validation. Generates:
|
|
198
|
+
|
|
199
|
+
- SKILL.md with valid YAML frontmatter
|
|
200
|
+
- Directory structure (scripts, templates, assets)
|
|
201
|
+
- Validation checks for spec compliance
|
|
202
|
+
|
|
203
|
+
### skill-tester
|
|
204
|
+
|
|
205
|
+
Validate skills against the specification. Tests:
|
|
206
|
+
|
|
207
|
+
- YAML frontmatter correctness
|
|
208
|
+
- File references and structure
|
|
209
|
+
- Common issues and anti-patterns
|
|
210
|
+
|
|
211
|
+
### skill-evaluator
|
|
212
|
+
|
|
213
|
+
Assess skill quality using rubric-based evaluation. Evaluates:
|
|
214
|
+
|
|
215
|
+
- Clarity and actionability
|
|
216
|
+
- Completeness and focus
|
|
217
|
+
- Examples and documentation quality
|
|
218
|
+
|
|
219
|
+
## Contributing
|
|
220
|
+
|
|
221
|
+
When creating new skills or workflows:
|
|
222
|
+
|
|
223
|
+
1. Use `skill-creator` for skills or follow `workflows/README.md` for workflows
|
|
224
|
+
2. Test with `skill-tester` to ensure spec compliance
|
|
225
|
+
3. Evaluate with `skill-evaluator` for quality assurance
|
|
226
|
+
4. Follow the test → evaluate → refine cycle
|
|
227
|
+
|
|
228
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for details.
|
|
229
|
+
|
|
230
|
+
## Resources
|
|
231
|
+
|
|
232
|
+
- [Agent Skills Specification](https://github.com/anthropics/skills/blob/main/agent_skills_spec.md)
|
|
233
|
+
- [Anthropics Skills Repository](https://github.com/anthropics/skills)
|
|
234
|
+
- [Development Workflows](DEVELOPMENT.md)
|
|
235
|
+
|
|
236
|
+
## License
|
|
237
|
+
|
|
238
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SAEzB,CAAC"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { Daemon } from "../../daemon/index.js";
|
|
4
|
+
import { requireConfig } from "../../lib/index.js";
|
|
5
|
+
export const daemonCommand = new Command("daemon").description("Manage the workflow scheduler daemon");
|
|
6
|
+
daemonCommand
|
|
7
|
+
.command("run")
|
|
8
|
+
.description("Run the daemon in foreground (for containers)")
|
|
9
|
+
.option("-p, --port <port>", "HTTP API port", "3141")
|
|
10
|
+
.option("--no-watch", "Disable file watching")
|
|
11
|
+
.action(async (options) => {
|
|
12
|
+
try {
|
|
13
|
+
const config = await requireConfig();
|
|
14
|
+
const daemon = new Daemon({
|
|
15
|
+
port: parseInt(options.port, 10),
|
|
16
|
+
watch: options.watch,
|
|
17
|
+
config,
|
|
18
|
+
});
|
|
19
|
+
// Handle shutdown signals
|
|
20
|
+
const shutdown = async () => {
|
|
21
|
+
console.log("\nShutting down...");
|
|
22
|
+
await daemon.stop();
|
|
23
|
+
process.exit(0);
|
|
24
|
+
};
|
|
25
|
+
process.on("SIGINT", shutdown);
|
|
26
|
+
process.on("SIGTERM", shutdown);
|
|
27
|
+
await daemon.start();
|
|
28
|
+
// Keep process running
|
|
29
|
+
console.log(chalk.green("\nDaemon running. Press Ctrl+C to stop.\n"));
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
daemonCommand
|
|
37
|
+
.command("status")
|
|
38
|
+
.description("Check daemon status")
|
|
39
|
+
.option("-p, --port <port>", "HTTP API port", "3141")
|
|
40
|
+
.action(async (options) => {
|
|
41
|
+
try {
|
|
42
|
+
const port = parseInt(options.port, 10);
|
|
43
|
+
const response = await fetch(`http://localhost:${port}/status`);
|
|
44
|
+
if (!response.ok) {
|
|
45
|
+
throw new Error(`HTTP ${response.status}`);
|
|
46
|
+
}
|
|
47
|
+
const status = await response.json();
|
|
48
|
+
console.log(chalk.blue("Daemon Status\n"));
|
|
49
|
+
console.log(chalk.white("Status:"), status.status);
|
|
50
|
+
console.log(chalk.white("Uptime:"), formatUptime(status.uptime));
|
|
51
|
+
console.log(chalk.white("Scheduled Jobs:"), status.jobs);
|
|
52
|
+
console.log(chalk.white("Version:"), status.version);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
if (error.message.includes("ECONNREFUSED")) {
|
|
56
|
+
console.log(chalk.yellow("Daemon is not running"));
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
60
|
+
}
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
daemonCommand
|
|
65
|
+
.command("jobs")
|
|
66
|
+
.description("List scheduled jobs")
|
|
67
|
+
.option("-p, --port <port>", "HTTP API port", "3141")
|
|
68
|
+
.action(async (options) => {
|
|
69
|
+
try {
|
|
70
|
+
const port = parseInt(options.port, 10);
|
|
71
|
+
const response = await fetch(`http://localhost:${port}/jobs`);
|
|
72
|
+
if (!response.ok) {
|
|
73
|
+
throw new Error(`HTTP ${response.status}`);
|
|
74
|
+
}
|
|
75
|
+
const { jobs } = await response.json();
|
|
76
|
+
if (jobs.length === 0) {
|
|
77
|
+
console.log(chalk.yellow("No scheduled jobs"));
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
console.log(chalk.blue(`Scheduled Jobs (${jobs.length})\n`));
|
|
81
|
+
for (const job of jobs) {
|
|
82
|
+
console.log(chalk.white(` ${job.workflowName}`));
|
|
83
|
+
console.log(chalk.dim(` Cron: ${job.cron}`));
|
|
84
|
+
if (job.nextRun) {
|
|
85
|
+
console.log(chalk.dim(` Next: ${new Date(job.nextRun).toLocaleString()}`));
|
|
86
|
+
}
|
|
87
|
+
if (job.lastRun) {
|
|
88
|
+
const status = job.lastStatus === "success" ? chalk.green("✓") : chalk.red("✗");
|
|
89
|
+
console.log(chalk.dim(` Last: ${new Date(job.lastRun).toLocaleString()} ${status}`));
|
|
90
|
+
}
|
|
91
|
+
console.log();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (error.message.includes("ECONNREFUSED")) {
|
|
96
|
+
console.log(chalk.yellow("Daemon is not running"));
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
100
|
+
}
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
daemonCommand
|
|
105
|
+
.command("trigger")
|
|
106
|
+
.description("Manually trigger a workflow")
|
|
107
|
+
.argument("<workflow>", "Workflow name")
|
|
108
|
+
.option("-p, --port <port>", "HTTP API port", "3141")
|
|
109
|
+
.action(async (workflow, options) => {
|
|
110
|
+
try {
|
|
111
|
+
const port = parseInt(options.port, 10);
|
|
112
|
+
const response = await fetch(`http://localhost:${port}/trigger/${workflow}`, {
|
|
113
|
+
method: "POST",
|
|
114
|
+
headers: { "Content-Type": "application/json" },
|
|
115
|
+
});
|
|
116
|
+
const result = await response.json();
|
|
117
|
+
if (result.success) {
|
|
118
|
+
console.log(chalk.green(`✓ ${result.message}`));
|
|
119
|
+
if (result.runId) {
|
|
120
|
+
console.log(chalk.dim(` Run ID: ${result.runId}`));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
console.error(chalk.red(`✗ ${result.message}`));
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
if (error.message.includes("ECONNREFUSED")) {
|
|
130
|
+
console.log(chalk.yellow("Daemon is not running"));
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
134
|
+
}
|
|
135
|
+
process.exit(1);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
daemonCommand
|
|
139
|
+
.command("reload")
|
|
140
|
+
.description("Reload workflows from disk")
|
|
141
|
+
.option("-p, --port <port>", "HTTP API port", "3141")
|
|
142
|
+
.action(async (options) => {
|
|
143
|
+
try {
|
|
144
|
+
const port = parseInt(options.port, 10);
|
|
145
|
+
const response = await fetch(`http://localhost:${port}/reload`, {
|
|
146
|
+
method: "POST",
|
|
147
|
+
});
|
|
148
|
+
const result = await response.json();
|
|
149
|
+
if (result.success) {
|
|
150
|
+
console.log(chalk.green(`✓ ${result.message}`));
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
console.error(chalk.red(`✗ ${result.error}`));
|
|
154
|
+
process.exit(1);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
if (error.message.includes("ECONNREFUSED")) {
|
|
159
|
+
console.log(chalk.yellow("Daemon is not running"));
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
163
|
+
}
|
|
164
|
+
process.exit(1);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
/**
|
|
168
|
+
* Format uptime in human-readable form
|
|
169
|
+
*/
|
|
170
|
+
function formatUptime(seconds) {
|
|
171
|
+
if (seconds < 60)
|
|
172
|
+
return `${seconds}s`;
|
|
173
|
+
if (seconds < 3600)
|
|
174
|
+
return `${Math.floor(seconds / 60)}m ${seconds % 60}s`;
|
|
175
|
+
const hours = Math.floor(seconds / 3600);
|
|
176
|
+
const mins = Math.floor((seconds % 3600) / 60);
|
|
177
|
+
return `${hours}h ${mins}m`;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/cli/commands/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,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"}
|
|
@@ -0,0 +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,SA6GpB,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { requireConfig, listWorkflows, loadWorkflow, listPersonas, loadPersona, } from "../../lib/index.js";
|
|
4
|
+
import { relative } from "node:path";
|
|
5
|
+
export const listCommand = new Command("list")
|
|
6
|
+
.description("List workflows or personas")
|
|
7
|
+
.argument("[type]", "Type to list: workflows (default) or personas", "workflows")
|
|
8
|
+
.option("-v, --verbose", "Show detailed information")
|
|
9
|
+
.action(async (type, options) => {
|
|
10
|
+
try {
|
|
11
|
+
const config = await requireConfig();
|
|
12
|
+
if (type === "workflows" || type === "w") {
|
|
13
|
+
const workflowPaths = await listWorkflows(config.workflowsDir);
|
|
14
|
+
if (workflowPaths.length === 0) {
|
|
15
|
+
console.log(chalk.yellow("No workflows found"));
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
console.log(chalk.blue(`Workflows (${workflowPaths.length}):\n`));
|
|
19
|
+
for (const workflowPath of workflowPaths) {
|
|
20
|
+
try {
|
|
21
|
+
const workflow = await loadWorkflow(workflowPath);
|
|
22
|
+
const relPath = relative(config.workflowsDir, workflowPath);
|
|
23
|
+
console.log(chalk.white(` ${workflow.name}`));
|
|
24
|
+
console.log(chalk.dim(` ${workflow.description}`));
|
|
25
|
+
if (options.verbose) {
|
|
26
|
+
console.log(chalk.dim(` Path: ${relPath}`));
|
|
27
|
+
console.log(chalk.dim(` Persona: ${workflow.persona}`));
|
|
28
|
+
if (workflow.on?.schedule) {
|
|
29
|
+
const crons = workflow.on.schedule.map((s) => s.cron).join(", ");
|
|
30
|
+
console.log(chalk.dim(` Schedule: ${crons}`));
|
|
31
|
+
}
|
|
32
|
+
if (workflow.on?.manual) {
|
|
33
|
+
console.log(chalk.dim(` Manual: enabled`));
|
|
34
|
+
}
|
|
35
|
+
if (workflow.inputs && workflow.inputs.length > 0) {
|
|
36
|
+
const inputNames = workflow.inputs.map((i) => i.name).join(", ");
|
|
37
|
+
console.log(chalk.dim(` Inputs: ${inputNames}`));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
console.log();
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
console.log(chalk.red(` ${workflowPath} (invalid)`));
|
|
44
|
+
if (options.verbose) {
|
|
45
|
+
console.log(chalk.red(` Error: ${error.message}`));
|
|
46
|
+
}
|
|
47
|
+
console.log();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else if (type === "personas" || type === "p") {
|
|
52
|
+
const personaPaths = await listPersonas(config.personasDir);
|
|
53
|
+
if (personaPaths.length === 0) {
|
|
54
|
+
console.log(chalk.yellow("No personas found"));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
console.log(chalk.blue(`Personas (${personaPaths.length}):\n`));
|
|
58
|
+
for (const personaPath of personaPaths) {
|
|
59
|
+
try {
|
|
60
|
+
const persona = await loadPersona(personaPath);
|
|
61
|
+
const relPath = relative(config.personasDir, personaPath);
|
|
62
|
+
console.log(chalk.white(` ${relPath}`));
|
|
63
|
+
if (persona.description) {
|
|
64
|
+
console.log(chalk.dim(` ${persona.description}`));
|
|
65
|
+
}
|
|
66
|
+
if (options.verbose) {
|
|
67
|
+
const cmd = Array.isArray(persona.cmd)
|
|
68
|
+
? persona.cmd[0]
|
|
69
|
+
: persona.cmd;
|
|
70
|
+
console.log(chalk.dim(` Command: ${cmd}`));
|
|
71
|
+
if (persona.skills && persona.skills.length > 0) {
|
|
72
|
+
console.log(chalk.dim(` Skills: ${persona.skills.join(", ")}`));
|
|
73
|
+
}
|
|
74
|
+
if (persona.env && Object.keys(persona.env).length > 0) {
|
|
75
|
+
console.log(chalk.dim(` Env: ${Object.keys(persona.env).join(", ")}`));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
console.log();
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.log(chalk.red(` ${personaPath} (invalid)`));
|
|
82
|
+
if (options.verbose) {
|
|
83
|
+
console.log(chalk.red(` Error: ${error.message}`));
|
|
84
|
+
}
|
|
85
|
+
console.log();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
console.error(chalk.red(`Unknown type: ${type}`));
|
|
91
|
+
console.error(chalk.dim("Valid types: workflows, personas"));
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,UAAU,SA2HnB,CAAC"}
|