lazyclaw 3.99.26 → 3.99.27
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/cli.mjs +93 -34
- package/package.json +1 -1
package/cli.mjs
CHANGED
|
@@ -1153,6 +1153,7 @@ const HELP_SUMMARIES = {
|
|
|
1153
1153
|
clear: 'Delete a persisted workflow state file (idempotent)',
|
|
1154
1154
|
validate: 'Static-check a workflow file: shape, deps, cycles, parallelism',
|
|
1155
1155
|
graph: 'Emit workflow DAG as Mermaid syntax (paste-ready for docs)',
|
|
1156
|
+
orchestrator: 'Multi-agent dispatch — planner decomposes, workers run, planner synthesises',
|
|
1156
1157
|
};
|
|
1157
1158
|
|
|
1158
1159
|
// Detailed usage per subcommand for `lazyclaw help <name>`. Kept as flat
|
|
@@ -4528,25 +4529,48 @@ async function _dispatchMenuChoice(argv) {
|
|
|
4528
4529
|
process.exit = (code) => { throw new _DispatchExit(code); };
|
|
4529
4530
|
try {
|
|
4530
4531
|
switch (sub) {
|
|
4531
|
-
case 'chat':
|
|
4532
|
-
case 'agent':
|
|
4533
|
-
case 'onboard':
|
|
4534
|
-
case 'setup':
|
|
4535
|
-
case 'workspace':
|
|
4536
|
-
case 'browse':
|
|
4537
|
-
case 'skills':
|
|
4538
|
-
case 'sessions':
|
|
4539
|
-
case 'providers':
|
|
4540
|
-
case 'cron':
|
|
4541
|
-
case 'auth':
|
|
4542
|
-
case 'pairing':
|
|
4543
|
-
case 'nodes':
|
|
4544
|
-
case 'message':
|
|
4545
|
-
case 'doctor':
|
|
4546
|
-
case 'status':
|
|
4547
|
-
|
|
4548
|
-
|
|
4549
|
-
|
|
4532
|
+
case 'chat': return await cmdChat({});
|
|
4533
|
+
case 'agent': return await cmdAgent(rest[0] || '-', {});
|
|
4534
|
+
case 'onboard': return await cmdOnboard({});
|
|
4535
|
+
case 'setup': return await cmdSetup(undefined, rest, {});
|
|
4536
|
+
case 'workspace': return await cmdWorkspace(rest[0], rest.slice(1), {});
|
|
4537
|
+
case 'browse': return await cmdBrowse(rest[0], {});
|
|
4538
|
+
case 'skills': return await cmdSkills(rest[0], rest.slice(1), {});
|
|
4539
|
+
case 'sessions': return await cmdSessions(rest[0], rest.slice(1), {});
|
|
4540
|
+
case 'providers': return await cmdProviders(rest[0], rest.slice(1), {});
|
|
4541
|
+
case 'cron': return await cmdCron(rest[0], rest.slice(1), {});
|
|
4542
|
+
case 'auth': return await cmdAuth(rest[0], rest.slice(1), {});
|
|
4543
|
+
case 'pairing': return await cmdPairing(rest[0], rest.slice(1), {});
|
|
4544
|
+
case 'nodes': return await cmdNodes(rest[0], rest.slice(1), {});
|
|
4545
|
+
case 'message': return await cmdMessage(rest[0], rest.slice(1), {});
|
|
4546
|
+
case 'doctor': return await cmdDoctor();
|
|
4547
|
+
case 'status': return await cmdStatus();
|
|
4548
|
+
// v3.99.27 — fill the rest of the lazyclaw <subcommand> surface
|
|
4549
|
+
// so the no-arg launcher mirrors every entry in SUBCOMMANDS.
|
|
4550
|
+
case 'orchestrator': return await cmdOrchestrator(rest[0], rest.slice(1), {});
|
|
4551
|
+
case 'rates': return await cmdRates(rest[0], rest.slice(1), {});
|
|
4552
|
+
case 'config': {
|
|
4553
|
+
// Mirror the main switch's tiny dispatcher.
|
|
4554
|
+
const csub = rest[0];
|
|
4555
|
+
if (csub === 'list' || csub === undefined) return cmdConfigGet(undefined);
|
|
4556
|
+
if (csub === 'get') return cmdConfigGet(rest[1]);
|
|
4557
|
+
if (csub === 'set') return cmdConfigSet(rest[1], rest.slice(2).join(' '));
|
|
4558
|
+
if (csub === 'path') { process.stdout.write(configPath() + '\n'); return; }
|
|
4559
|
+
if (csub === 'edit') return await cmdConfigEdit();
|
|
4560
|
+
if (csub === 'validate') return await cmdConfigValidate();
|
|
4561
|
+
process.stderr.write('Usage: lazyclaw config <get|set|list|delete|path|edit|validate>\n');
|
|
4562
|
+
return;
|
|
4563
|
+
}
|
|
4564
|
+
case 'inspect': return await cmdInspect(rest[0], {});
|
|
4565
|
+
case 'export': return await cmdExport({});
|
|
4566
|
+
case 'version': return await cmdVersion();
|
|
4567
|
+
// help <cmd> is the safe fallback for commands that need real
|
|
4568
|
+
// arguments (run / resume / clear / validate / graph / daemon /
|
|
4569
|
+
// import / completion). Print the usage so the user can re-launch
|
|
4570
|
+
// with proper flags — the menu stays alive.
|
|
4571
|
+
case 'help': return cmdHelp(rest[0]);
|
|
4572
|
+
case 'dashboard': return await cmdDashboard({});
|
|
4573
|
+
default: throw new Error(`unknown menu choice: ${sub}`);
|
|
4550
4574
|
}
|
|
4551
4575
|
} catch (e) {
|
|
4552
4576
|
if (e instanceof _DispatchExit) {
|
|
@@ -4568,22 +4592,57 @@ async function cmdLauncher() {
|
|
|
4568
4592
|
await ensureRegistry();
|
|
4569
4593
|
// Item table is fixed across iterations — only the dispatcher and
|
|
4570
4594
|
// the per-iteration draw redraw on each loop tick.
|
|
4595
|
+
// Mirror every top-level `lazyclaw <subcommand>` here so the no-arg
|
|
4596
|
+
// launcher is a complete discovery surface. Commands that need
|
|
4597
|
+
// arguments (workflow runner, daemon, completion, import) route
|
|
4598
|
+
// through `help <cmd>` so the menu pick prints copy-pasteable usage
|
|
4599
|
+
// instead of erroring or blocking. Commands with a sensible default
|
|
4600
|
+
// ('list' / 'status') get dispatched directly.
|
|
4571
4601
|
const items = [
|
|
4572
|
-
|
|
4573
|
-
{ id: '
|
|
4574
|
-
{ id: '
|
|
4575
|
-
{ id: '
|
|
4576
|
-
|
|
4577
|
-
{ id: '
|
|
4578
|
-
{ id: '
|
|
4579
|
-
{ id: '
|
|
4580
|
-
|
|
4581
|
-
{ id: 'providers',
|
|
4582
|
-
{ id: '
|
|
4583
|
-
{ id: '
|
|
4584
|
-
{ id: '
|
|
4585
|
-
|
|
4586
|
-
{ id: '
|
|
4602
|
+
// Core interaction
|
|
4603
|
+
{ id: 'chat', label: 'Chat', desc: 'interactive REPL with the configured provider', argv: ['chat'] },
|
|
4604
|
+
{ id: 'agent', label: 'Agent', desc: 'one-shot prompt — read text and exit', argv: ['agent'], promptForBody: true },
|
|
4605
|
+
{ id: 'orchestrator', label: 'Orchestrator', desc: 'multi-agent dispatch — planner + workers', argv: ['orchestrator', 'status'] },
|
|
4606
|
+
// UI & onboarding
|
|
4607
|
+
{ id: 'dashboard', label: 'Dashboard', desc: 'open the lazyclaw web UI in your browser', argv: ['dashboard'] },
|
|
4608
|
+
{ id: 'setup', label: 'Setup', desc: 'multi-step provider / workspace / skill wizard',argv: ['setup'] },
|
|
4609
|
+
{ id: 'onboard', label: 'Onboard', desc: 'pick provider / model / api-key', argv: ['onboard'] },
|
|
4610
|
+
// Auth & config
|
|
4611
|
+
{ id: 'providers', label: 'Providers', desc: 'registered providers + reachability', argv: ['providers', 'list'] },
|
|
4612
|
+
{ id: 'auth', label: 'Auth', desc: 'multi-key rotation per provider', argv: ['help', 'auth'] },
|
|
4613
|
+
{ id: 'config', label: 'Config', desc: 'cfg.json get/set/list/delete/path/edit', argv: ['config', 'list'] },
|
|
4614
|
+
{ id: 'rates', label: 'Rates', desc: 'per-model input/output pricing cards', argv: ['rates', 'list'] },
|
|
4615
|
+
// Workspaces & assets
|
|
4616
|
+
{ id: 'workspace', label: 'Workspace', desc: 'AGENTS.md / SOUL.md / TOOLS.md prompt bundles', argv: ['workspace', 'list'] },
|
|
4617
|
+
{ id: 'skills', label: 'Skills', desc: 'installed skill bundles', argv: ['skills', 'list'] },
|
|
4618
|
+
{ id: 'sessions', label: 'Sessions', desc: 'persisted chat sessions', argv: ['sessions', 'list'] },
|
|
4619
|
+
// Outbound & schedule
|
|
4620
|
+
{ id: 'browse', label: 'Browse', desc: 'fetch a URL → markdown', argv: ['browse'], promptForUrl: true },
|
|
4621
|
+
{ id: 'message', label: 'Message', desc: 'outbound webhook (Slack / Discord / generic)', argv: ['message', 'list'] },
|
|
4622
|
+
{ id: 'cron', label: 'Cron', desc: 'recurring agent runs (launchd / crontab)', argv: ['cron', 'list'] },
|
|
4623
|
+
// Workflow runner (.mjs)
|
|
4624
|
+
{ id: 'run', label: 'Run', desc: '.mjs workflow runner (needs session + file)', argv: ['help', 'run'] },
|
|
4625
|
+
{ id: 'resume', label: 'Resume', desc: 're-enter a persisted workflow run', argv: ['help', 'resume'] },
|
|
4626
|
+
{ id: 'inspect', label: 'Inspect', desc: 'list / drill into persisted workflow sessions', argv: ['inspect'] },
|
|
4627
|
+
{ id: 'clear', label: 'Clear', desc: 'delete the state file for a session', argv: ['help', 'clear'] },
|
|
4628
|
+
{ id: 'validate', label: 'Validate', desc: 'static-check a workflow.mjs (shape + deps)', argv: ['help', 'validate'] },
|
|
4629
|
+
{ id: 'graph', label: 'Graph', desc: 'emit Mermaid graph TD / LR from a workflow', argv: ['help', 'graph'] },
|
|
4630
|
+
// Devices & process
|
|
4631
|
+
{ id: 'pairing', label: 'Pairing', desc: 'sender allowlist for the messaging surface', argv: ['pairing', 'list'] },
|
|
4632
|
+
{ id: 'nodes', label: 'Nodes', desc: 'companion device registry', argv: ['nodes', 'list'] },
|
|
4633
|
+
{ id: 'daemon', label: 'Daemon', desc: 'localhost HTTP daemon (blocking — see usage)', argv: ['help', 'daemon'] },
|
|
4634
|
+
// Bundle
|
|
4635
|
+
{ id: 'export', label: 'Export', desc: 'redacted config bundle → stdout', argv: ['export'] },
|
|
4636
|
+
{ id: 'import', label: 'Import', desc: 'restore from a bundle on stdin', argv: ['help', 'import'] },
|
|
4637
|
+
// Tools
|
|
4638
|
+
{ id: 'completion', label: 'Completion', desc: 'shell completion (bash | zsh)', argv: ['help', 'completion'] },
|
|
4639
|
+
{ id: 'version', label: 'Version', desc: 'lazyclaw version + Node + platform', argv: ['version'] },
|
|
4640
|
+
// Diagnostics
|
|
4641
|
+
{ id: 'doctor', label: 'Doctor', desc: 'diagnostic — config, providers, workflows', argv: ['doctor'] },
|
|
4642
|
+
{ id: 'status', label: 'Status', desc: 'current provider / model / masked key', argv: ['status'] },
|
|
4643
|
+
// Meta
|
|
4644
|
+
{ id: 'help', label: 'Help', desc: 'one-line summary of every subcommand', argv: ['help'] },
|
|
4645
|
+
{ id: 'quit', label: 'Quit', desc: 'exit lazyclaw', argv: null },
|
|
4587
4646
|
];
|
|
4588
4647
|
|
|
4589
4648
|
const accent = (s) => `\x1b[38;5;208m${s}\x1b[0m`;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lazyclaw",
|
|
3
|
-
"version": "3.99.
|
|
3
|
+
"version": "3.99.27",
|
|
4
4
|
"description": "Lazy, elegant terminal CLI for chatting with Claude / OpenAI / Gemini / Ollama and orchestrating multi-step LLM workflows. Banner-on-launch, slash-command ghost autocomplete, persistent sessions, local HTTP gateway.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude",
|