@some-useful-agents/cli 0.1.0 → 0.3.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.
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,aAAa,SA4HtB,CAAC"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,aAAa,SAgKtB,CAAC"}
@@ -3,7 +3,7 @@ import { execSync } from 'node:child_process';
3
3
  import { existsSync } from 'node:fs';
4
4
  import chalk from 'chalk';
5
5
  import { loadConfig, getAgentDirs, getSecretsPath } from '../config.js';
6
- import { loadAgents, EncryptedFileStore } from '@some-useful-agents/core';
6
+ import { loadAgents, EncryptedFileStore, LocalScheduler, detectLlms } from '@some-useful-agents/core';
7
7
  export const doctorCommand = new Command('doctor')
8
8
  .description('Check prerequisites and system health')
9
9
  .action(() => {
@@ -89,6 +89,44 @@ export const doctorCommand = new Command('doctor')
89
89
  }
90
90
  },
91
91
  },
92
+ {
93
+ name: 'Scheduler',
94
+ run: () => {
95
+ const valid = LocalScheduler.isValid('* * * * *');
96
+ return { ok: valid, message: valid ? 'node-cron ready' : 'node-cron not functioning' };
97
+ },
98
+ },
99
+ {
100
+ name: 'LLM CLIs (for sua tutorial --explain)',
101
+ run: () => {
102
+ const avail = detectLlms();
103
+ const names = [];
104
+ if (avail.claude.installed)
105
+ names.push('claude');
106
+ if (avail.codex.installed)
107
+ names.push('codex');
108
+ if (names.length === 0) {
109
+ return { ok: true, message: 'none installed (tutorial explain feature disabled)' };
110
+ }
111
+ return { ok: true, message: names.join(', ') + ' available' };
112
+ },
113
+ },
114
+ {
115
+ name: 'Scheduled agents',
116
+ run: () => {
117
+ const dirs = getAgentDirs(config);
118
+ const { agents } = loadAgents({ directories: dirs.runnable });
119
+ const scheduled = Array.from(agents.values()).filter(a => a.schedule);
120
+ if (scheduled.length === 0) {
121
+ return { ok: true, message: 'none' };
122
+ }
123
+ const invalid = scheduled.filter(a => !LocalScheduler.isValid(a.schedule));
124
+ if (invalid.length > 0) {
125
+ return { ok: false, message: `${invalid.length} agent(s) with invalid cron: ${invalid.map(a => a.name).join(', ')}` };
126
+ }
127
+ return { ok: true, message: `${scheduled.length} scheduled` };
128
+ },
129
+ },
92
130
  {
93
131
  name: 'Agent secrets',
94
132
  run: () => {
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,SAkCpB,CAAC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,WAAW,SA4CpB,CAAC"}
@@ -2,6 +2,7 @@ import { Command } from 'commander';
2
2
  import { writeFileSync, existsSync, mkdirSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
4
  import chalk from 'chalk';
5
+ import { HELLO_AGENT_YAML } from '../scaffolds.js';
5
6
  export const initCommand = new Command('init')
6
7
  .description('Initialize some-useful-agents in the current directory')
7
8
  .action(() => {
@@ -28,7 +29,16 @@ export const initCommand = new Command('init')
28
29
  mkdirSync(config.dataDir, { recursive: true });
29
30
  console.log(chalk.green(`Created ${config.dataDir}/`));
30
31
  }
31
- console.log(chalk.dim('\nRun "sua agent list" to see available agents.'));
32
- console.log(chalk.dim('Run "sua agent run hello-shell" to test your first agent.'));
32
+ // Scaffold the hello agent so `sua agent list` isn't empty
33
+ const helloPath = join(agentsLocal, 'hello.yaml');
34
+ if (!existsSync(helloPath)) {
35
+ writeFileSync(helloPath, HELLO_AGENT_YAML);
36
+ console.log(chalk.green(`Created ${helloPath}`));
37
+ }
38
+ console.log('');
39
+ console.log(chalk.bold('Next steps:'));
40
+ console.log(` ${chalk.cyan('sua tutorial')} ${chalk.dim('- guided walkthrough (recommended)')}`);
41
+ console.log(` ${chalk.cyan('sua agent run hello')} ${chalk.dim('- run your first agent')}`);
42
+ console.log(` ${chalk.cyan('sua doctor')} ${chalk.dim('- check prerequisites')}`);
33
43
  });
34
44
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAE1D,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACvE,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG;QACb,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,UAAU;QACrB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,IAAI;KACd,CAAC;IAEF,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAEpD,2BAA2B;IAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,WAAW,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC,CAAC;AACtF,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const scheduleCommand: Command;
3
+ //# sourceMappingURL=schedule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/commands/schedule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,eAAe,SACiB,CAAC"}
@@ -0,0 +1,111 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import Table from 'cli-table3';
4
+ import { loadAgents, LocalScheduler } from '@some-useful-agents/core';
5
+ import { loadConfig, getAgentDirs } from '../config.js';
6
+ import { createProvider } from '../provider-factory.js';
7
+ export const scheduleCommand = new Command('schedule')
8
+ .description('Manage scheduled agent runs');
9
+ scheduleCommand
10
+ .command('list')
11
+ .description('List agents with a schedule field')
12
+ .action(() => {
13
+ const config = loadConfig();
14
+ const dirs = getAgentDirs(config);
15
+ const { agents } = loadAgents({ directories: dirs.runnable });
16
+ const scheduled = Array.from(agents.values()).filter(a => a.schedule);
17
+ if (scheduled.length === 0) {
18
+ console.log(chalk.dim('No agents have a schedule. Add `schedule: "<cron>"` to an agent YAML.'));
19
+ return;
20
+ }
21
+ const table = new Table({
22
+ head: [chalk.bold('Name'), chalk.bold('Schedule'), chalk.bold('Valid?')],
23
+ });
24
+ for (const agent of scheduled) {
25
+ const valid = LocalScheduler.isValid(agent.schedule);
26
+ table.push([
27
+ chalk.cyan(agent.name),
28
+ agent.schedule,
29
+ valid ? chalk.green('yes') : chalk.red('no'),
30
+ ]);
31
+ }
32
+ console.log('\n' + chalk.bold('Scheduled Agents') + '\n');
33
+ console.log(table.toString());
34
+ });
35
+ scheduleCommand
36
+ .command('validate')
37
+ .description('Validate the cron expression of a scheduled agent')
38
+ .argument('<name>', 'Agent name')
39
+ .action((name) => {
40
+ const config = loadConfig();
41
+ const dirs = getAgentDirs(config);
42
+ const { agents } = loadAgents({ directories: dirs.runnable });
43
+ const agent = agents.get(name);
44
+ if (!agent) {
45
+ console.error(chalk.red(`Agent "${name}" not found.`));
46
+ process.exit(1);
47
+ }
48
+ if (!agent.schedule) {
49
+ console.log(chalk.yellow(`Agent "${name}" has no schedule field.`));
50
+ return;
51
+ }
52
+ const valid = LocalScheduler.isValid(agent.schedule);
53
+ if (valid) {
54
+ console.log(chalk.green(`"${agent.schedule}" is a valid cron expression.`));
55
+ }
56
+ else {
57
+ console.error(chalk.red(`"${agent.schedule}" is not a valid cron expression.`));
58
+ process.exit(1);
59
+ }
60
+ });
61
+ scheduleCommand
62
+ .command('start')
63
+ .description('Start the scheduler daemon (foreground)')
64
+ .action(async () => {
65
+ const config = loadConfig();
66
+ const dirs = getAgentDirs(config);
67
+ const { agents, warnings } = loadAgents({ directories: dirs.runnable });
68
+ for (const w of warnings) {
69
+ console.error(chalk.yellow(`Warning: ${w.file}: ${w.message}`));
70
+ }
71
+ const provider = await createProvider(config);
72
+ const scheduler = new LocalScheduler({
73
+ provider,
74
+ agents,
75
+ onFire: (agent, runId) => {
76
+ const ts = new Date().toISOString();
77
+ console.log(`${chalk.dim(ts)} ${chalk.green('fired')} ${chalk.cyan(agent.name)} run=${runId.slice(0, 8)}`);
78
+ },
79
+ onError: (agent, err) => {
80
+ console.error(chalk.red(`Error firing ${agent.name}: ${err.message}`));
81
+ },
82
+ });
83
+ let entries;
84
+ try {
85
+ entries = scheduler.start();
86
+ }
87
+ catch (err) {
88
+ console.error(chalk.red(err.message));
89
+ await provider.shutdown();
90
+ process.exit(1);
91
+ }
92
+ if (entries.length === 0) {
93
+ console.log(chalk.yellow('No agents have a schedule. Add `schedule: "<cron>"` to an agent YAML and restart.'));
94
+ await provider.shutdown();
95
+ return;
96
+ }
97
+ console.log(chalk.bold(`\nScheduler running with ${entries.length} agent(s):`));
98
+ for (const { agent, schedule } of entries) {
99
+ console.log(` ${chalk.cyan(agent.name)} ${chalk.dim(schedule)}`);
100
+ }
101
+ console.log(chalk.dim('\nPress Ctrl+C to stop.\n'));
102
+ const shutdown = async () => {
103
+ console.log('\nShutting down scheduler...');
104
+ scheduler.stop();
105
+ await provider.shutdown();
106
+ process.exit(0);
107
+ };
108
+ process.on('SIGINT', () => { void shutdown(); });
109
+ process.on('SIGTERM', () => { void shutdown(); });
110
+ });
111
+ //# sourceMappingURL=schedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/commands/schedule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const tutorialCommand: Command;
3
+ //# sourceMappingURL=tutorial.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tutorial.d.ts","sourceRoot":"","sources":["../../src/commands/tutorial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoSpC,eAAO,MAAM,eAAe,SASxB,CAAC"}
@@ -0,0 +1,272 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { createInterface } from 'node:readline/promises';
5
+ import { writeFileSync, existsSync, mkdirSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ import { loadAgents, detectLlms, invokeLlm, } from '@some-useful-agents/core';
8
+ import { loadConfig, getAgentDirs } from '../config.js';
9
+ import { createProvider } from '../provider-factory.js';
10
+ import { DAD_JOKE_AGENT_YAML, DAILY_9AM_SCHEDULE, HELLO_AGENT_YAML } from '../scaffolds.js';
11
+ const STAGES = [
12
+ 'What is sua?',
13
+ 'The agent YAML format',
14
+ 'Run your first agent',
15
+ 'Build the dad-joke agent',
16
+ 'Schedule it',
17
+ ];
18
+ async function runTutorial() {
19
+ const config = loadConfig();
20
+ const agentsLocalDir = join(config.agentsDir, 'local');
21
+ if (!existsSync(agentsLocalDir))
22
+ mkdirSync(agentsLocalDir, { recursive: true });
23
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
24
+ const llm = await pickLlm(rl);
25
+ const ctx = { rl, llm, config, agentsLocalDir };
26
+ try {
27
+ printHeader();
28
+ await stage1(ctx);
29
+ await stage2(ctx);
30
+ await stage3(ctx);
31
+ await stage4(ctx);
32
+ await stage5(ctx);
33
+ printOutro();
34
+ }
35
+ finally {
36
+ rl.close();
37
+ }
38
+ }
39
+ async function pickLlm(rl) {
40
+ const avail = detectLlms();
41
+ if (avail.claude.installed && avail.codex.installed) {
42
+ const answer = (await rl.question(chalk.dim('Both Claude and Codex are installed. Use which for `explain`? [claude/codex] (default: claude) '))).trim().toLowerCase();
43
+ if (answer === 'codex')
44
+ return 'codex';
45
+ return 'claude';
46
+ }
47
+ if (avail.claude.installed)
48
+ return 'claude';
49
+ if (avail.codex.installed)
50
+ return 'codex';
51
+ return null;
52
+ }
53
+ function printHeader() {
54
+ console.log('');
55
+ console.log(chalk.bold.cyan('sua tutorial'));
56
+ console.log(chalk.dim('A 5-stage guided walkthrough. Type ') + chalk.cyan('explain') + chalk.dim(' at any prompt for a deeper dive.'));
57
+ console.log('');
58
+ }
59
+ function stageBanner(n, title) {
60
+ console.log('');
61
+ console.log(chalk.bold(`[${n}/${STAGES.length}] ${title}`));
62
+ console.log(chalk.dim('─'.repeat(60)));
63
+ }
64
+ async function pause(ctx, stageTopic) {
65
+ if (!ctx.llm) {
66
+ await ctx.rl.question(chalk.dim('\nPress Enter to continue... '));
67
+ return;
68
+ }
69
+ const prompt = chalk.dim(`\nPress Enter to continue, or type `) + chalk.cyan('explain') + chalk.dim(` for a ${ctx.llm} deep-dive: `);
70
+ const answer = (await ctx.rl.question(prompt)).trim().toLowerCase();
71
+ if (answer === 'explain') {
72
+ await doExplain(ctx, stageTopic);
73
+ // After explain, another pause (but skip the explain option to avoid loops)
74
+ await ctx.rl.question(chalk.dim('\nPress Enter to continue... '));
75
+ }
76
+ }
77
+ async function doExplain(ctx, topic) {
78
+ if (!ctx.llm)
79
+ return;
80
+ const prompt = buildExplainPrompt(topic);
81
+ const spinner = ora(`Asking ${ctx.llm}...`).start();
82
+ const result = await invokeLlm({ prompt, provider: ctx.llm, timeoutMs: 60_000 });
83
+ spinner.stop();
84
+ if (result.exitCode !== 0) {
85
+ console.log(chalk.red(`[${ctx.llm} error] ${result.error ?? 'unknown'}`));
86
+ return;
87
+ }
88
+ console.log('\n' + chalk.dim('─── ' + ctx.llm + ' says ───'));
89
+ console.log(result.output.trim());
90
+ console.log(chalk.dim('─'.repeat(60)));
91
+ }
92
+ function buildExplainPrompt(topic) {
93
+ return `You are explaining the "some-useful-agents" (sua) CLI tool to a developer working through the built-in tutorial. sua is a local-first agent playground. Agents are defined in YAML files (either shell commands or Claude Code prompts), can be chained (dependsOn + {{outputs.X.result}} template syntax), can be scheduled via cron, and can run through a LocalProvider (child_process) or Temporal. Secrets are stored in an encrypted file store, and env filtering prevents secret leakage to community agents.
94
+
95
+ The user just reached this tutorial stage: "${topic}"
96
+
97
+ Give a 3-5 sentence deeper explanation of this specific stage. Be concrete. No marketing language. End with one practical tip they can try right now.`;
98
+ }
99
+ async function stage1(ctx) {
100
+ stageBanner(1, 'What is sua?');
101
+ console.log('sua is a local-first agent playground.');
102
+ console.log('');
103
+ console.log('You define agents in YAML files — they can be shell commands');
104
+ console.log('(running ' + chalk.cyan('curl') + ', ' + chalk.cyan('git') + ', any script) or Claude Code prompts.');
105
+ console.log('Run them manually, on a schedule, or expose them to Claude Code');
106
+ console.log('via MCP so any AI tool can trigger them.');
107
+ console.log('');
108
+ console.log('By the end of this tutorial you will have fetched a dad joke');
109
+ console.log('from an external API and scheduled it to arrive every morning.');
110
+ await pause(ctx, 'What is sua and what makes it different from cron + shell scripts?');
111
+ }
112
+ async function stage2(ctx) {
113
+ stageBanner(2, 'The agent YAML format');
114
+ console.log('An agent is just a YAML file. Here is the ' + chalk.cyan('hello') + ' agent that `sua init` scaffolded:');
115
+ console.log('');
116
+ console.log(chalk.dim(indent(HELLO_AGENT_YAML.trim(), ' ')));
117
+ console.log('');
118
+ console.log('Required fields: ' + chalk.bold('name') + ', ' + chalk.bold('type') + ' (shell | claude-code).');
119
+ console.log('Shell agents need ' + chalk.bold('command') + '. Claude agents need ' + chalk.bold('prompt') + '.');
120
+ console.log('Optional: ' + chalk.bold('timeout') + ', ' + chalk.bold('env') + ', ' + chalk.bold('secrets') + ', ' + chalk.bold('schedule') + ', ' + chalk.bold('dependsOn') + '.');
121
+ await pause(ctx, 'The agent YAML schema and how trust levels (examples/local/community) affect env var inheritance.');
122
+ }
123
+ async function stage3(ctx) {
124
+ stageBanner(3, 'Run your first agent');
125
+ console.log('Let us run the ' + chalk.cyan('hello') + ' agent right now.');
126
+ console.log('');
127
+ const { agents } = loadAgents({ directories: getAgentDirs(ctx.config).runnable });
128
+ const agent = agents.get('hello');
129
+ if (!agent) {
130
+ console.log(chalk.yellow('The hello agent is missing. Did you run `sua init`?'));
131
+ return;
132
+ }
133
+ const provider = await createProvider(ctx.config);
134
+ const spinner = ora('Running hello...').start();
135
+ try {
136
+ const run = await provider.submitRun({ agent, triggeredBy: 'cli' });
137
+ let current = run;
138
+ while (current.status === 'running' || current.status === 'pending') {
139
+ await new Promise(r => setTimeout(r, 250));
140
+ const updated = await provider.getRun(run.id);
141
+ if (updated)
142
+ current = updated;
143
+ }
144
+ spinner.stop();
145
+ if (current.status === 'completed') {
146
+ console.log(chalk.green('✓ completed'));
147
+ console.log(chalk.dim(' output: ') + (current.result ?? '').trim());
148
+ console.log(chalk.dim(' run ID: ') + current.id);
149
+ console.log(chalk.dim(' recorded in: ' + join(ctx.config.dataDir, 'runs.db')));
150
+ }
151
+ else {
152
+ console.log(chalk.red('agent did not complete: ' + current.status));
153
+ if (current.error)
154
+ console.log(chalk.red(current.error));
155
+ }
156
+ }
157
+ finally {
158
+ await provider.shutdown();
159
+ }
160
+ await pause(ctx, 'Where runs are stored, how to query them, and when to use --provider temporal instead of local.');
161
+ }
162
+ async function stage4(ctx) {
163
+ stageBanner(4, 'Build the dad-joke agent');
164
+ console.log('Now a real agent that calls an external API.');
165
+ console.log('');
166
+ console.log(chalk.dim(indent(DAD_JOKE_AGENT_YAML.trim(), ' ')));
167
+ console.log('');
168
+ const path = join(ctx.agentsLocalDir, 'dad-joke.yaml');
169
+ if (existsSync(path)) {
170
+ console.log(chalk.dim('(already exists at ' + path + ', skipping write)'));
171
+ }
172
+ else {
173
+ writeFileSync(path, DAD_JOKE_AGENT_YAML);
174
+ console.log(chalk.green('Wrote ' + path));
175
+ }
176
+ console.log('\nRunning it now...');
177
+ const { agents } = loadAgents({ directories: getAgentDirs(ctx.config).runnable });
178
+ const agent = agents.get('dad-joke');
179
+ if (!agent) {
180
+ console.log(chalk.yellow('dad-joke agent did not load. Check ' + path));
181
+ return;
182
+ }
183
+ const provider = await createProvider(ctx.config);
184
+ const spinner = ora('curl icanhazdadjoke.com...').start();
185
+ try {
186
+ const run = await provider.submitRun({ agent, triggeredBy: 'cli' });
187
+ let current = run;
188
+ while (current.status === 'running' || current.status === 'pending') {
189
+ await new Promise(r => setTimeout(r, 250));
190
+ const updated = await provider.getRun(run.id);
191
+ if (updated)
192
+ current = updated;
193
+ }
194
+ spinner.stop();
195
+ if (current.status === 'completed') {
196
+ console.log('');
197
+ console.log(chalk.bold.yellow('🎭 ' + (current.result ?? '').trim()));
198
+ console.log('');
199
+ }
200
+ else {
201
+ console.log(chalk.red('failed: ' + (current.error ?? current.status)));
202
+ console.log(chalk.dim('Network issue? Check `sua doctor` and try `sua agent run dad-joke` manually.'));
203
+ }
204
+ }
205
+ finally {
206
+ await provider.shutdown();
207
+ }
208
+ await pause(ctx, 'How the shell agent executes curl, where the output lives, and how you would add secrets (e.g. API keys) via `sua secrets`.');
209
+ }
210
+ async function stage5(ctx) {
211
+ stageBanner(5, 'Schedule it');
212
+ console.log('Make the dad joke arrive every morning at 9am local time.');
213
+ console.log('This adds ' + chalk.cyan('schedule: "0 9 * * *"') + ' to the agent and starts the cron scheduler.');
214
+ console.log('');
215
+ const answer = (await ctx.rl.question(chalk.dim('Schedule dad-joke daily at 9am? [Y/n] '))).trim().toLowerCase();
216
+ if (answer === 'n' || answer === 'no') {
217
+ console.log(chalk.dim('Skipped. You can add a schedule field manually and run `sua schedule start` later.'));
218
+ return;
219
+ }
220
+ const path = join(ctx.agentsLocalDir, 'dad-joke.yaml');
221
+ if (!existsSync(path)) {
222
+ console.log(chalk.yellow('dad-joke.yaml missing. Re-run stage 4.'));
223
+ return;
224
+ }
225
+ const { readFileSync } = await import('node:fs');
226
+ const contents = readFileSync(path, 'utf-8');
227
+ if (!contents.includes('schedule:')) {
228
+ writeFileSync(path, contents.trimEnd() + '\n' + DAILY_9AM_SCHEDULE);
229
+ console.log(chalk.green('Added schedule field to ' + path));
230
+ }
231
+ else {
232
+ console.log(chalk.dim('Schedule already present in ' + path));
233
+ }
234
+ console.log('');
235
+ console.log(chalk.bold('Next:') + ' start the scheduler to fire it on cron:');
236
+ console.log(' ' + chalk.cyan('sua schedule start') + ' ' + chalk.dim('(foreground; Ctrl+C to stop)'));
237
+ console.log(' ' + chalk.cyan('sua schedule list') + ' ' + chalk.dim('(see all scheduled agents)'));
238
+ console.log('');
239
+ console.log(chalk.dim('For the daemon to run unattended, use a process manager (pm2, launchd).'));
240
+ await pause(ctx, 'How the cron scheduler works: node-cron loads agents with schedule fields, runs each on its own timer, records each fire in the run store with triggeredBy=schedule. What schedules look like (standard 5-field cron).');
241
+ }
242
+ function printOutro() {
243
+ console.log('');
244
+ console.log(chalk.bold.green('Tutorial complete.'));
245
+ console.log('');
246
+ console.log('You now have:');
247
+ console.log(' • a working ' + chalk.cyan('hello') + ' agent');
248
+ console.log(' • a ' + chalk.cyan('dad-joke') + ' agent that fetches from an external API');
249
+ console.log(' • a schedule set for daily 9am fires');
250
+ console.log('');
251
+ console.log('Try:');
252
+ console.log(' ' + chalk.cyan('sua agent list') + ' ' + chalk.dim('see what you have'));
253
+ console.log(' ' + chalk.cyan('sua agent status') + ' ' + chalk.dim('see your run history'));
254
+ console.log(' ' + chalk.cyan('sua agent run dad-joke') + ' ' + chalk.dim('get another joke now'));
255
+ console.log(' ' + chalk.cyan('sua schedule start') + ' ' + chalk.dim('start the scheduler'));
256
+ console.log('');
257
+ }
258
+ function indent(text, prefix) {
259
+ return text.split('\n').map(line => prefix + line).join('\n');
260
+ }
261
+ export const tutorialCommand = new Command('tutorial')
262
+ .description('Run the interactive onboarding walkthrough')
263
+ .action(async () => {
264
+ try {
265
+ await runTutorial();
266
+ }
267
+ catch (err) {
268
+ console.error(chalk.red(err.message));
269
+ process.exit(1);
270
+ }
271
+ });
272
+ //# sourceMappingURL=tutorial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tutorial.js","sourceRoot":"","sources":["../../src/commands/tutorial.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -10,6 +10,8 @@ import { doctorCommand } from './commands/doctor.js';
10
10
  import { mcpCommand } from './commands/mcp.js';
11
11
  import { secretsCommand } from './commands/secrets.js';
12
12
  import { workerCommand } from './commands/worker.js';
13
+ import { scheduleCommand } from './commands/schedule.js';
14
+ import { tutorialCommand } from './commands/tutorial.js';
13
15
  const program = new Command();
14
16
  program
15
17
  .name('sua')
@@ -28,5 +30,7 @@ program.addCommand(doctorCommand);
28
30
  program.addCommand(mcpCommand);
29
31
  program.addCommand(secretsCommand);
30
32
  program.addCommand(workerCommand);
33
+ program.addCommand(scheduleCommand);
34
+ program.addCommand(tutorialCommand);
31
35
  program.parse();
32
36
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,qDAAqD,CAAC;KAClE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,MAAM,KAAK,GAAG,OAAO;KAClB,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,uBAAuB,CAAC,CAAC;AAExC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAC9B,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC7B,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAChC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAC9B,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAEhC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,qDAAqD,CAAC;KAClE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,MAAM,KAAK,GAAG,OAAO;KAClB,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,uBAAuB,CAAC,CAAC;AAExC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAC9B,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC7B,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAChC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAC9B,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAEhC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AAEpC,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Inline YAML templates for `sua init` and `sua tutorial` scaffolding.
3
+ * Kept here rather than shipping agents/examples/ files in the npm package
4
+ * because the CLI `files` field lists only `dist`. Embedding keeps the package
5
+ * small and avoids a post-install copy step.
6
+ */
7
+ export declare const HELLO_AGENT_YAML = "name: hello\ndescription: Your first sua agent \u2014 prints a greeting\ntype: shell\ncommand: \"echo 'Hello from some-useful-agents!'\"\ntimeout: 10\ntags: [starter]\n";
8
+ export declare const DAD_JOKE_AGENT_YAML = "name: dad-joke\ndescription: Fetch a dad joke from icanhazdadjoke.com\ntype: shell\ncommand: \"curl -s -H 'Accept: text/plain' https://icanhazdadjoke.com/\"\ntimeout: 10\ntags: [example, http]\n";
9
+ /** Schedule line to append to the dad-joke YAML when the user opts in. */
10
+ export declare const DAILY_9AM_SCHEDULE = "schedule: \"0 9 * * *\"\n";
11
+ //# sourceMappingURL=scaffolds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffolds.d.ts","sourceRoot":"","sources":["../src/scaffolds.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,gBAAgB,6KAM5B,CAAC;AAEF,eAAO,MAAM,mBAAmB,uMAM/B,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB,8BAA4B,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Inline YAML templates for `sua init` and `sua tutorial` scaffolding.
3
+ * Kept here rather than shipping agents/examples/ files in the npm package
4
+ * because the CLI `files` field lists only `dist`. Embedding keeps the package
5
+ * small and avoids a post-install copy step.
6
+ */
7
+ export const HELLO_AGENT_YAML = `name: hello
8
+ description: Your first sua agent — prints a greeting
9
+ type: shell
10
+ command: "echo 'Hello from some-useful-agents!'"
11
+ timeout: 10
12
+ tags: [starter]
13
+ `;
14
+ export const DAD_JOKE_AGENT_YAML = `name: dad-joke
15
+ description: Fetch a dad joke from icanhazdadjoke.com
16
+ type: shell
17
+ command: "curl -s -H 'Accept: text/plain' https://icanhazdadjoke.com/"
18
+ timeout: 10
19
+ tags: [example, http]
20
+ `;
21
+ /** Schedule line to append to the dad-joke YAML when the user opts in. */
22
+ export const DAILY_9AM_SCHEDULE = `schedule: "0 9 * * *"\n`;
23
+ //# sourceMappingURL=scaffolds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffolds.js","sourceRoot":"","sources":["../src/scaffolds.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;CAM/B,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;CAMlC,CAAC;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,yBAAyB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@some-useful-agents/cli",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "CLI for some-useful-agents",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -32,5 +32,14 @@
32
32
  "dist",
33
33
  "README.md",
34
34
  "LICENSE"
35
- ]
35
+ ],
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "git+https://github.com/gregmeyer/some-useful-agents.git",
39
+ "directory": "packages/cli"
40
+ },
41
+ "homepage": "https://github.com/gregmeyer/some-useful-agents#readme",
42
+ "bugs": {
43
+ "url": "https://github.com/gregmeyer/some-useful-agents/issues"
44
+ }
36
45
  }