moflo 4.10.22 → 4.10.24
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/.claude/guidance/shipped/moflo-skills-reference.md +1 -1
- package/.claude/helpers/gate.cjs +2 -2
- package/.claude/skills/distill/SKILL.md +10 -0
- package/README.md +1 -1
- package/bin/gate.cjs +2 -2
- package/dist/src/cli/commands/agent.js +14 -14
- package/dist/src/cli/commands/analyze.js +52 -52
- package/dist/src/cli/commands/benchmark.js +14 -14
- package/dist/src/cli/commands/claims.js +15 -15
- package/dist/src/cli/commands/completions.js +40 -40
- package/dist/src/cli/commands/config.js +8 -8
- package/dist/src/cli/commands/daemon.js +24 -24
- package/dist/src/cli/commands/deployment.js +15 -15
- package/dist/src/cli/commands/doctor-checks-config.js +6 -6
- package/dist/src/cli/commands/doctor.js +10 -10
- package/dist/src/cli/commands/embeddings.js +49 -49
- package/dist/src/cli/commands/guidance.js +22 -22
- package/dist/src/cli/commands/hive-mind.js +21 -21
- package/dist/src/cli/commands/hooks.js +95 -95
- package/dist/src/cli/commands/init.js +17 -17
- package/dist/src/cli/commands/issues.js +6 -6
- package/dist/src/cli/commands/mcp.js +10 -10
- package/dist/src/cli/commands/memory.js +56 -47
- package/dist/src/cli/commands/migrate.js +5 -5
- package/dist/src/cli/commands/neural.js +31 -31
- package/dist/src/cli/commands/performance.js +13 -13
- package/dist/src/cli/commands/plugins.js +26 -26
- package/dist/src/cli/commands/process.js +32 -32
- package/dist/src/cli/commands/progress.js +5 -5
- package/dist/src/cli/commands/providers.js +13 -13
- package/dist/src/cli/commands/route.js +26 -26
- package/dist/src/cli/commands/security.js +19 -19
- package/dist/src/cli/commands/session.js +13 -13
- package/dist/src/cli/commands/start.js +11 -11
- package/dist/src/cli/commands/status.js +8 -8
- package/dist/src/cli/commands/swarm.js +7 -7
- package/dist/src/cli/commands/task.js +9 -9
- package/dist/src/cli/commands/transfer-store.js +16 -16
- package/dist/src/cli/commands/update.js +2 -2
- package/dist/src/cli/hooks/statusline/index.js +3 -3
- package/dist/src/cli/init/executor.js +7 -6
- package/dist/src/cli/init/helpers-generator.js +6 -6
- package/dist/src/cli/mcp-tools/hooks-tools.js +1 -1
- package/dist/src/cli/memory/auto-memory-bridge.js +1 -1
- package/dist/src/cli/memory/memory-initializer.js +1 -1
- package/dist/src/cli/plugins/tests/demo-plugin-store.js +6 -6
- package/dist/src/cli/version.js +1 -1
- package/package.json +2 -2
|
@@ -26,8 +26,8 @@ const HIVE_MIND_SUBCOMMANDS = ['init', 'spawn', 'status', 'task', 'join', 'leave
|
|
|
26
26
|
const HOOKS_SUBCOMMANDS = ['pre-edit', 'post-edit', 'pre-command', 'post-command', 'pre-task', 'post-task', 'route', 'explain', 'pretrain', 'build-agents', 'metrics', 'transfer', 'list', 'intelligence'];
|
|
27
27
|
// Generate bash completion script
|
|
28
28
|
function generateBashCompletion() {
|
|
29
|
-
return `#
|
|
30
|
-
# Generated by
|
|
29
|
+
return `# flo bash completion
|
|
30
|
+
# Generated by flo completions bash
|
|
31
31
|
# Add this to ~/.bashrc or ~/.bash_completion
|
|
32
32
|
|
|
33
33
|
_claude_flow_completions() {
|
|
@@ -117,16 +117,16 @@ _claude_flow_completions() {
|
|
|
117
117
|
fi
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
-
complete -F _claude_flow_completions
|
|
120
|
+
complete -F _claude_flow_completions flo
|
|
121
121
|
complete -F _claude_flow_completions npx\\ moflo
|
|
122
122
|
`;
|
|
123
123
|
}
|
|
124
124
|
// Generate zsh completion script
|
|
125
125
|
function generateZshCompletion() {
|
|
126
|
-
return `#compdef
|
|
127
|
-
#
|
|
128
|
-
# Generated by
|
|
129
|
-
# Add to ~/.zfunc/
|
|
126
|
+
return `#compdef flo
|
|
127
|
+
# flo zsh completion
|
|
128
|
+
# Generated by flo completions zsh
|
|
129
|
+
# Add to ~/.zfunc/_flo or ~/.zsh/completions/_flo
|
|
130
130
|
|
|
131
131
|
_claude_flow() {
|
|
132
132
|
local -a commands
|
|
@@ -165,7 +165,7 @@ _claude_flow() {
|
|
|
165
165
|
|
|
166
166
|
case $state in
|
|
167
167
|
command)
|
|
168
|
-
_describe -t commands '
|
|
168
|
+
_describe -t commands 'flo commands' commands
|
|
169
169
|
;;
|
|
170
170
|
subcommand)
|
|
171
171
|
case $words[2] in
|
|
@@ -343,66 +343,66 @@ _claude_flow "$@"
|
|
|
343
343
|
}
|
|
344
344
|
// Generate fish completion script
|
|
345
345
|
function generateFishCompletion() {
|
|
346
|
-
return `#
|
|
347
|
-
# Generated by
|
|
348
|
-
# Save to ~/.config/fish/completions/
|
|
346
|
+
return `# flo fish completion
|
|
347
|
+
# Generated by flo completions fish
|
|
348
|
+
# Save to ~/.config/fish/completions/flo.fish
|
|
349
349
|
|
|
350
350
|
# Disable file completion by default
|
|
351
|
-
complete -c
|
|
351
|
+
complete -c flo -f
|
|
352
352
|
|
|
353
353
|
# Top-level commands
|
|
354
|
-
${TOP_LEVEL_COMMANDS.map(cmd => `complete -c
|
|
354
|
+
${TOP_LEVEL_COMMANDS.map(cmd => `complete -c flo -n "__fish_use_subcommand" -a "${cmd}"`).join('\n')}
|
|
355
355
|
|
|
356
356
|
# Swarm subcommands
|
|
357
|
-
${SWARM_SUBCOMMANDS.map(sub => `complete -c
|
|
357
|
+
${SWARM_SUBCOMMANDS.map(sub => `complete -c flo -n "__fish_seen_subcommand_from swarm" -a "${sub}"`).join('\n')}
|
|
358
358
|
|
|
359
359
|
# Agent subcommands
|
|
360
|
-
${AGENT_SUBCOMMANDS.map(sub => `complete -c
|
|
360
|
+
${AGENT_SUBCOMMANDS.map(sub => `complete -c flo -n "__fish_seen_subcommand_from agent" -a "${sub}"`).join('\n')}
|
|
361
361
|
|
|
362
362
|
# Task subcommands
|
|
363
|
-
${TASK_SUBCOMMANDS.map(sub => `complete -c
|
|
363
|
+
${TASK_SUBCOMMANDS.map(sub => `complete -c flo -n "__fish_seen_subcommand_from task" -a "${sub}"`).join('\n')}
|
|
364
364
|
|
|
365
365
|
# Memory subcommands
|
|
366
|
-
${MEMORY_SUBCOMMANDS.map(sub => `complete -c
|
|
366
|
+
${MEMORY_SUBCOMMANDS.map(sub => `complete -c flo -n "__fish_seen_subcommand_from memory" -a "${sub}"`).join('\n')}
|
|
367
367
|
|
|
368
368
|
# Hive-mind subcommands
|
|
369
|
-
${HIVE_MIND_SUBCOMMANDS.map(sub => `complete -c
|
|
369
|
+
${HIVE_MIND_SUBCOMMANDS.map(sub => `complete -c flo -n "__fish_seen_subcommand_from hive-mind hive" -a "${sub}"`).join('\n')}
|
|
370
370
|
|
|
371
371
|
# Hooks subcommands
|
|
372
|
-
${HOOKS_SUBCOMMANDS.map(sub => `complete -c
|
|
372
|
+
${HOOKS_SUBCOMMANDS.map(sub => `complete -c flo -n "__fish_seen_subcommand_from hooks" -a "${sub}"`).join('\n')}
|
|
373
373
|
|
|
374
374
|
# Neural subcommands
|
|
375
|
-
complete -c
|
|
375
|
+
complete -c flo -n "__fish_seen_subcommand_from neural" -a "train status patterns predict optimize"
|
|
376
376
|
|
|
377
377
|
# Security subcommands
|
|
378
|
-
complete -c
|
|
378
|
+
complete -c flo -n "__fish_seen_subcommand_from security" -a "scan cve threats audit secrets"
|
|
379
379
|
|
|
380
380
|
# Performance subcommands
|
|
381
|
-
complete -c
|
|
381
|
+
complete -c flo -n "__fish_seen_subcommand_from performance" -a "benchmark profile metrics optimize bottleneck"
|
|
382
382
|
|
|
383
383
|
# Plugins subcommands
|
|
384
|
-
complete -c
|
|
384
|
+
complete -c flo -n "__fish_seen_subcommand_from plugins" -a "list install uninstall toggle info create"
|
|
385
385
|
|
|
386
386
|
# Deployment subcommands
|
|
387
|
-
complete -c
|
|
387
|
+
complete -c flo -n "__fish_seen_subcommand_from deployment deploy" -a "deploy status rollback history environments logs"
|
|
388
388
|
|
|
389
389
|
# Claims subcommands
|
|
390
|
-
complete -c
|
|
390
|
+
complete -c flo -n "__fish_seen_subcommand_from claims" -a "list check grant revoke roles policies"
|
|
391
391
|
|
|
392
392
|
# Embeddings subcommands
|
|
393
|
-
complete -c
|
|
393
|
+
complete -c flo -n "__fish_seen_subcommand_from embeddings" -a "generate search compare collections index providers"
|
|
394
394
|
|
|
395
395
|
# Daemon subcommands
|
|
396
|
-
complete -c
|
|
396
|
+
complete -c flo -n "__fish_seen_subcommand_from daemon" -a "start stop status trigger enable"
|
|
397
397
|
|
|
398
398
|
# Providers subcommands
|
|
399
|
-
complete -c
|
|
399
|
+
complete -c flo -n "__fish_seen_subcommand_from providers" -a "list configure test models usage"
|
|
400
400
|
`;
|
|
401
401
|
}
|
|
402
402
|
// Generate PowerShell completion script
|
|
403
403
|
function generatePowerShellCompletion() {
|
|
404
|
-
return `#
|
|
405
|
-
# Generated by
|
|
404
|
+
return `# flo PowerShell completion
|
|
405
|
+
# Generated by flo completions powershell
|
|
406
406
|
# Add to $PROFILE or save to a separate file and dot-source it
|
|
407
407
|
|
|
408
408
|
$script:ClaudeFlowCommands = @(
|
|
@@ -429,7 +429,7 @@ $script:SubCommands = @{
|
|
|
429
429
|
'providers' = @('list', 'configure', 'test', 'models', 'usage')
|
|
430
430
|
}
|
|
431
431
|
|
|
432
|
-
Register-ArgumentCompleter -Native -CommandName
|
|
432
|
+
Register-ArgumentCompleter -Native -CommandName flo -ScriptBlock {
|
|
433
433
|
param($wordToComplete, $commandAst, $cursorPosition)
|
|
434
434
|
|
|
435
435
|
$tokens = $commandAst.ToString().Split(' ')
|
|
@@ -498,10 +498,10 @@ export const completionsCommand = {
|
|
|
498
498
|
subcommands: [bashCommand, zshCommand, fishCommand, powershellCommand],
|
|
499
499
|
options: [],
|
|
500
500
|
examples: [
|
|
501
|
-
{ command: '
|
|
502
|
-
{ command: '
|
|
503
|
-
{ command: '
|
|
504
|
-
{ command: '
|
|
501
|
+
{ command: 'flo completions bash > ~/.bash_completion.d/flo', description: 'Install bash completions' },
|
|
502
|
+
{ command: 'flo completions zsh > ~/.zfunc/_flo', description: 'Install zsh completions' },
|
|
503
|
+
{ command: 'flo completions fish > ~/.config/fish/completions/flo.fish', description: 'Install fish completions' },
|
|
504
|
+
{ command: 'flo completions powershell >> $PROFILE', description: 'Install PowerShell completions' }
|
|
505
505
|
],
|
|
506
506
|
action: async () => {
|
|
507
507
|
output.writeln();
|
|
@@ -520,19 +520,19 @@ export const completionsCommand = {
|
|
|
520
520
|
output.writeln('Installation:');
|
|
521
521
|
output.writeln();
|
|
522
522
|
output.writeln(output.bold('Bash:'));
|
|
523
|
-
output.writeln(output.dim('
|
|
524
|
-
output.writeln(output.dim(' source ~/.bash_completion.d/
|
|
523
|
+
output.writeln(output.dim(' flo completions bash > ~/.bash_completion.d/flo'));
|
|
524
|
+
output.writeln(output.dim(' source ~/.bash_completion.d/flo'));
|
|
525
525
|
output.writeln();
|
|
526
526
|
output.writeln(output.bold('Zsh:'));
|
|
527
527
|
output.writeln(output.dim(' mkdir -p ~/.zfunc'));
|
|
528
|
-
output.writeln(output.dim('
|
|
528
|
+
output.writeln(output.dim(' flo completions zsh > ~/.zfunc/_flo'));
|
|
529
529
|
output.writeln(output.dim(' # Add to ~/.zshrc: fpath=(~/.zfunc $fpath); autoload -Uz compinit && compinit'));
|
|
530
530
|
output.writeln();
|
|
531
531
|
output.writeln(output.bold('Fish:'));
|
|
532
|
-
output.writeln(output.dim('
|
|
532
|
+
output.writeln(output.dim(' flo completions fish > ~/.config/fish/completions/flo.fish'));
|
|
533
533
|
output.writeln();
|
|
534
534
|
output.writeln(output.bold('PowerShell:'));
|
|
535
|
-
output.writeln(output.dim('
|
|
535
|
+
output.writeln(output.dim(' flo completions powershell >> $PROFILE'));
|
|
536
536
|
return { success: true };
|
|
537
537
|
}
|
|
538
538
|
};
|
|
@@ -115,8 +115,8 @@ const getCommand = {
|
|
|
115
115
|
}
|
|
116
116
|
],
|
|
117
117
|
examples: [
|
|
118
|
-
{ command: '
|
|
119
|
-
{ command: '
|
|
118
|
+
{ command: 'flo config get swarm.topology', description: 'Get swarm topology' },
|
|
119
|
+
{ command: 'flo config get -k memory.backend', description: 'Get memory backend' }
|
|
120
120
|
],
|
|
121
121
|
action: async (ctx) => {
|
|
122
122
|
const key = ctx.flags.key || ctx.args[0];
|
|
@@ -186,8 +186,8 @@ const setCommand = {
|
|
|
186
186
|
}
|
|
187
187
|
],
|
|
188
188
|
examples: [
|
|
189
|
-
{ command: '
|
|
190
|
-
{ command: '
|
|
189
|
+
{ command: 'flo config set swarm.maxAgents 20', description: 'Set max agents' },
|
|
190
|
+
{ command: 'flo config set -k memory.backend -v agentdb', description: 'Set memory backend' }
|
|
191
191
|
],
|
|
192
192
|
action: async (ctx) => {
|
|
193
193
|
const key = ctx.flags.key || ctx.args[0];
|
|
@@ -411,15 +411,15 @@ export const configCommand = {
|
|
|
411
411
|
subcommands: [initCommand, getCommand, setCommand, providersCommand, resetCommand, exportCommand, importCommand, showCommand, generateCommand],
|
|
412
412
|
options: [],
|
|
413
413
|
examples: [
|
|
414
|
-
{ command: '
|
|
415
|
-
{ command: '
|
|
416
|
-
{ command: '
|
|
414
|
+
{ command: 'flo config init --v3', description: 'Initialize V3 config' },
|
|
415
|
+
{ command: 'flo config get swarm.topology', description: 'Get config value' },
|
|
416
|
+
{ command: 'flo config set swarm.maxAgents 20', description: 'Set config value' }
|
|
417
417
|
],
|
|
418
418
|
action: async (ctx) => {
|
|
419
419
|
output.writeln();
|
|
420
420
|
output.writeln(output.bold('Configuration Management'));
|
|
421
421
|
output.writeln();
|
|
422
|
-
output.writeln('Usage:
|
|
422
|
+
output.writeln('Usage: flo config <subcommand> [options]');
|
|
423
423
|
output.writeln();
|
|
424
424
|
output.writeln('Subcommands:');
|
|
425
425
|
output.printList([
|
|
@@ -57,10 +57,10 @@ const startCommand = {
|
|
|
57
57
|
{ name: 'no-dashboard', type: 'boolean', description: 'Disable the dashboard HTTP server' },
|
|
58
58
|
],
|
|
59
59
|
examples: [
|
|
60
|
-
{ command: '
|
|
61
|
-
{ command: '
|
|
62
|
-
{ command: '
|
|
63
|
-
{ command: '
|
|
60
|
+
{ command: 'flo daemon start', description: 'Start daemon in background (default)' },
|
|
61
|
+
{ command: 'flo daemon start --foreground', description: 'Start in foreground (blocks terminal)' },
|
|
62
|
+
{ command: 'flo daemon start -w map,optimize', description: 'Start with specific workers' },
|
|
63
|
+
{ command: 'flo daemon start --headless --sandbox strict', description: 'Start with headless workers in strict sandbox' },
|
|
64
64
|
],
|
|
65
65
|
action: async (ctx) => {
|
|
66
66
|
const quiet = ctx.flags.quiet;
|
|
@@ -437,7 +437,7 @@ async function startBackgroundDaemon(projectRoot, quiet, maxCpuLoad, minFreeMemo
|
|
|
437
437
|
}
|
|
438
438
|
}
|
|
439
439
|
output.printInfo(`Logs: ${logFile}`);
|
|
440
|
-
output.printInfo(`Stop with:
|
|
440
|
+
output.printInfo(`Stop with: flo daemon stop`);
|
|
441
441
|
}
|
|
442
442
|
return { success: true };
|
|
443
443
|
}
|
|
@@ -449,7 +449,7 @@ const stopCommand = {
|
|
|
449
449
|
{ name: 'quiet', short: 'Q', type: 'boolean', description: 'Suppress output' },
|
|
450
450
|
],
|
|
451
451
|
examples: [
|
|
452
|
-
{ command: '
|
|
452
|
+
{ command: 'flo daemon stop', description: 'Stop the daemon' },
|
|
453
453
|
],
|
|
454
454
|
action: async (ctx) => {
|
|
455
455
|
const quiet = ctx.flags.quiet;
|
|
@@ -576,9 +576,9 @@ const statusCommand = {
|
|
|
576
576
|
{ name: 'show-modes', type: 'boolean', description: 'Show worker execution modes (local/headless) and sandbox settings' },
|
|
577
577
|
],
|
|
578
578
|
examples: [
|
|
579
|
-
{ command: '
|
|
580
|
-
{ command: '
|
|
581
|
-
{ command: '
|
|
579
|
+
{ command: 'flo daemon status', description: 'Show daemon status' },
|
|
580
|
+
{ command: 'flo daemon status -v', description: 'Show detailed status' },
|
|
581
|
+
{ command: 'flo daemon status --show-modes', description: 'Show worker execution modes' },
|
|
582
582
|
],
|
|
583
583
|
action: async (ctx) => {
|
|
584
584
|
const verbose = ctx.flags.verbose;
|
|
@@ -693,7 +693,7 @@ const statusCommand = {
|
|
|
693
693
|
`Autostart: ${autostartIcon} ${autostartInstalled ? 'registered' : 'not registered'}`,
|
|
694
694
|
`Scheduler: ${schedIcon} ${schedulerConfig.enabled ? 'enabled' : 'disabled'} (config)`,
|
|
695
695
|
'',
|
|
696
|
-
'Run "
|
|
696
|
+
'Run "flo daemon start" to start the daemon',
|
|
697
697
|
].join('\n'), 'MoFlo Daemon');
|
|
698
698
|
return { success: true };
|
|
699
699
|
}
|
|
@@ -708,8 +708,8 @@ const triggerCommand = {
|
|
|
708
708
|
{ name: 'headless', type: 'boolean', description: 'Run triggered worker in headless mode (E2B sandbox)' },
|
|
709
709
|
],
|
|
710
710
|
examples: [
|
|
711
|
-
{ command: '
|
|
712
|
-
{ command: '
|
|
711
|
+
{ command: 'flo daemon trigger -w map', description: 'Trigger the map worker' },
|
|
712
|
+
{ command: 'flo daemon trigger -w optimize --headless', description: 'Trigger optimize in headless sandbox' },
|
|
713
713
|
],
|
|
714
714
|
action: async (ctx) => {
|
|
715
715
|
const workerType = ctx.flags.worker;
|
|
@@ -752,8 +752,8 @@ const enableCommand = {
|
|
|
752
752
|
{ name: 'disable', short: 'd', type: 'boolean', description: 'Disable instead of enable' },
|
|
753
753
|
],
|
|
754
754
|
examples: [
|
|
755
|
-
{ command: '
|
|
756
|
-
{ command: '
|
|
755
|
+
{ command: 'flo daemon enable -w testgaps', description: 'Enable testgaps worker' },
|
|
756
|
+
{ command: 'flo daemon enable -w refactor --disable', description: 'Disable refactor worker' },
|
|
757
757
|
],
|
|
758
758
|
action: async (ctx) => {
|
|
759
759
|
const workerType = ctx.flags.worker;
|
|
@@ -782,7 +782,7 @@ const installCommand = {
|
|
|
782
782
|
{ name: 'quiet', short: 'Q', type: 'boolean', description: 'Suppress output' },
|
|
783
783
|
],
|
|
784
784
|
examples: [
|
|
785
|
-
{ command: '
|
|
785
|
+
{ command: 'flo daemon install', description: 'Register daemon as login service' },
|
|
786
786
|
],
|
|
787
787
|
action: async (ctx) => {
|
|
788
788
|
const quiet = ctx.flags.quiet;
|
|
@@ -816,7 +816,7 @@ const uninstallCommand = {
|
|
|
816
816
|
{ name: 'quiet', short: 'Q', type: 'boolean', description: 'Suppress output' },
|
|
817
817
|
],
|
|
818
818
|
examples: [
|
|
819
|
-
{ command: '
|
|
819
|
+
{ command: 'flo daemon uninstall', description: 'Remove daemon login service' },
|
|
820
820
|
],
|
|
821
821
|
action: async (ctx) => {
|
|
822
822
|
const quiet = ctx.flags.quiet;
|
|
@@ -879,13 +879,13 @@ export const daemonCommand = {
|
|
|
879
879
|
],
|
|
880
880
|
options: [],
|
|
881
881
|
examples: [
|
|
882
|
-
{ command: '
|
|
883
|
-
{ command: '
|
|
884
|
-
{ command: '
|
|
885
|
-
{ command: '
|
|
886
|
-
{ command: '
|
|
887
|
-
{ command: '
|
|
888
|
-
{ command: '
|
|
882
|
+
{ command: 'flo daemon start', description: 'Start the daemon' },
|
|
883
|
+
{ command: 'flo daemon start --headless', description: 'Start with headless workers (E2B sandbox)' },
|
|
884
|
+
{ command: 'flo daemon status', description: 'Check daemon status' },
|
|
885
|
+
{ command: 'flo daemon stop', description: 'Stop the daemon' },
|
|
886
|
+
{ command: 'flo daemon trigger -w optimize', description: 'Run the optimize worker' },
|
|
887
|
+
{ command: 'flo daemon install', description: 'Register as OS login service' },
|
|
888
|
+
{ command: 'flo daemon uninstall', description: 'Remove OS login service' },
|
|
889
889
|
],
|
|
890
890
|
action: async () => {
|
|
891
891
|
output.writeln();
|
|
@@ -922,7 +922,7 @@ export const daemonCommand = {
|
|
|
922
922
|
`${output.highlight('uninstall')} - Remove OS login service`,
|
|
923
923
|
]);
|
|
924
924
|
output.writeln();
|
|
925
|
-
output.writeln('Run "
|
|
925
|
+
output.writeln('Run "flo daemon <subcommand> --help" for details');
|
|
926
926
|
return { success: true };
|
|
927
927
|
},
|
|
928
928
|
};
|
|
@@ -17,8 +17,8 @@ const deployCommand = {
|
|
|
17
17
|
{ name: 'rollback-on-fail', type: 'boolean', description: 'Auto rollback on failure', default: 'true' },
|
|
18
18
|
],
|
|
19
19
|
examples: [
|
|
20
|
-
{ command: '
|
|
21
|
-
{ command: '
|
|
20
|
+
{ command: 'flo deployment deploy -e prod', description: 'Deploy to production' },
|
|
21
|
+
{ command: 'flo deployment deploy --dry-run', description: 'Simulate deployment' },
|
|
22
22
|
],
|
|
23
23
|
action: async (ctx) => {
|
|
24
24
|
const env = ctx.flags.env || 'staging';
|
|
@@ -68,8 +68,8 @@ const statusCommand = {
|
|
|
68
68
|
{ name: 'watch', short: 'w', type: 'boolean', description: 'Watch for changes' },
|
|
69
69
|
],
|
|
70
70
|
examples: [
|
|
71
|
-
{ command: '
|
|
72
|
-
{ command: '
|
|
71
|
+
{ command: 'flo deployment status', description: 'Show all environments' },
|
|
72
|
+
{ command: 'flo deployment status -e prod', description: 'Check production' },
|
|
73
73
|
],
|
|
74
74
|
action: async (ctx) => {
|
|
75
75
|
output.writeln();
|
|
@@ -103,8 +103,8 @@ const rollbackCommand = {
|
|
|
103
103
|
{ name: 'steps', short: 's', type: 'number', description: 'Number of versions to rollback', default: '1' },
|
|
104
104
|
],
|
|
105
105
|
examples: [
|
|
106
|
-
{ command: '
|
|
107
|
-
{ command: '
|
|
106
|
+
{ command: 'flo deployment rollback -e prod', description: 'Rollback production' },
|
|
107
|
+
{ command: 'flo deployment rollback -e prod -v v3.0.0', description: 'Rollback to specific version' },
|
|
108
108
|
],
|
|
109
109
|
action: async (ctx) => {
|
|
110
110
|
const env = ctx.flags.env;
|
|
@@ -144,8 +144,8 @@ const historyCommand = {
|
|
|
144
144
|
{ name: 'limit', short: 'l', type: 'number', description: 'Number of entries', default: '10' },
|
|
145
145
|
],
|
|
146
146
|
examples: [
|
|
147
|
-
{ command: '
|
|
148
|
-
{ command: '
|
|
147
|
+
{ command: 'flo deployment history', description: 'Show all history' },
|
|
148
|
+
{ command: 'flo deployment history -e prod', description: 'Production history' },
|
|
149
149
|
],
|
|
150
150
|
action: async (ctx) => {
|
|
151
151
|
const env = ctx.flags.env;
|
|
@@ -182,8 +182,8 @@ const environmentsCommand = {
|
|
|
182
182
|
{ name: 'name', short: 'n', type: 'string', description: 'Environment name' },
|
|
183
183
|
],
|
|
184
184
|
examples: [
|
|
185
|
-
{ command: '
|
|
186
|
-
{ command: '
|
|
185
|
+
{ command: 'flo deployment environments', description: 'List environments' },
|
|
186
|
+
{ command: 'flo deployment envs -a create -n preview', description: 'Create environment' },
|
|
187
187
|
],
|
|
188
188
|
action: async (ctx) => {
|
|
189
189
|
output.writeln();
|
|
@@ -217,8 +217,8 @@ const logsCommand = {
|
|
|
217
217
|
{ name: 'lines', short: 'n', type: 'number', description: 'Number of lines', default: '50' },
|
|
218
218
|
],
|
|
219
219
|
examples: [
|
|
220
|
-
{ command: '
|
|
221
|
-
{ command: '
|
|
220
|
+
{ command: 'flo deployment logs -e prod', description: 'View production logs' },
|
|
221
|
+
{ command: 'flo deployment logs -d dep-123', description: 'View specific deployment' },
|
|
222
222
|
],
|
|
223
223
|
action: async (ctx) => {
|
|
224
224
|
const env = ctx.flags.env || 'staging';
|
|
@@ -254,9 +254,9 @@ export const deploymentCommand = {
|
|
|
254
254
|
aliases: ['deploy'],
|
|
255
255
|
subcommands: [deployCommand, statusCommand, rollbackCommand, historyCommand, environmentsCommand, logsCommand],
|
|
256
256
|
examples: [
|
|
257
|
-
{ command: '
|
|
258
|
-
{ command: '
|
|
259
|
-
{ command: '
|
|
257
|
+
{ command: 'flo deployment deploy -e prod', description: 'Deploy to production' },
|
|
258
|
+
{ command: 'flo deployment status', description: 'Check all environments' },
|
|
259
|
+
{ command: 'flo deployment rollback -e prod', description: 'Rollback production' },
|
|
260
260
|
],
|
|
261
261
|
action: async () => {
|
|
262
262
|
output.writeln();
|
|
@@ -47,7 +47,7 @@ export async function checkConfigFile() {
|
|
|
47
47
|
return { name: 'Config File', status: 'pass', message: `Found: ${configPath}` };
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
-
return { name: 'Config File', status: 'warn', message: 'No config file (using defaults)', fix: '
|
|
50
|
+
return { name: 'Config File', status: 'warn', message: 'No config file (using defaults)', fix: 'npx moflo config init' };
|
|
51
51
|
}
|
|
52
52
|
export async function checkStatusLine() {
|
|
53
53
|
const settingsPath = join(process.cwd(), '.claude', 'settings.json');
|
|
@@ -91,16 +91,16 @@ export async function checkDaemonStatus() {
|
|
|
91
91
|
// getDaemonLockHolder auto-cleans stale locks, but check for legacy PID file
|
|
92
92
|
const lockFile = '.moflo/daemon.lock';
|
|
93
93
|
if (existsSync(lockFile)) {
|
|
94
|
-
return { name: 'Daemon Status', status: 'warn', message: 'Stale lock file', fix: '
|
|
94
|
+
return { name: 'Daemon Status', status: 'warn', message: 'Stale lock file', fix: 'npx moflo daemon start' };
|
|
95
95
|
}
|
|
96
96
|
const pidFile = '.moflo/daemon.pid';
|
|
97
97
|
if (existsSync(pidFile)) {
|
|
98
|
-
return { name: 'Daemon Status', status: 'warn', message: 'Legacy PID file found', fix: '
|
|
98
|
+
return { name: 'Daemon Status', status: 'warn', message: 'Legacy PID file found', fix: 'npx moflo daemon start' };
|
|
99
99
|
}
|
|
100
|
-
return { name: 'Daemon Status', status: 'warn', message: 'Not running', fix: '
|
|
100
|
+
return { name: 'Daemon Status', status: 'warn', message: 'Not running', fix: 'npx moflo daemon start' };
|
|
101
101
|
}
|
|
102
102
|
catch (e) {
|
|
103
|
-
return { name: 'Daemon Status', status: 'warn', message: `Unable to check: ${errorDetail(e)}`, fix: '
|
|
103
|
+
return { name: 'Daemon Status', status: 'warn', message: `Unable to check: ${errorDetail(e)}`, fix: 'npx moflo daemon status' };
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
/**
|
|
@@ -265,7 +265,7 @@ export async function checkMemoryDatabase() {
|
|
|
265
265
|
fix: 'restart claude code session',
|
|
266
266
|
};
|
|
267
267
|
}
|
|
268
|
-
return { name: 'Memory Database', status: 'warn', message: 'Not initialized', fix: '
|
|
268
|
+
return { name: 'Memory Database', status: 'warn', message: 'Not initialized', fix: 'npx moflo memory configure --backend hybrid' };
|
|
269
269
|
}
|
|
270
270
|
/**
|
|
271
271
|
* Catches `.swarm/` residue that survived past the canonical migration:
|
|
@@ -86,16 +86,16 @@ export const doctorCommand = {
|
|
|
86
86
|
},
|
|
87
87
|
],
|
|
88
88
|
examples: [
|
|
89
|
-
{ command: '
|
|
90
|
-
{ command: '
|
|
91
|
-
{ command: '
|
|
92
|
-
{ command: '
|
|
93
|
-
{ command: '
|
|
94
|
-
{ command: '
|
|
95
|
-
{ command: '
|
|
96
|
-
{ command: '
|
|
97
|
-
{ command: '
|
|
98
|
-
{ command: '
|
|
89
|
+
{ command: 'flo doctor', description: 'Run full health check' },
|
|
90
|
+
{ command: 'flo doctor --fix', description: 'Show fixes for issues' },
|
|
91
|
+
{ command: 'flo doctor --install', description: 'Auto-install missing dependencies' },
|
|
92
|
+
{ command: 'flo doctor --kill-zombies', description: 'Find and kill zombie processes' },
|
|
93
|
+
{ command: 'flo doctor -c version', description: 'Check for stale npx cache' },
|
|
94
|
+
{ command: 'flo doctor -c claude', description: 'Check Claude Code CLI only' },
|
|
95
|
+
{ command: 'flo doctor --strict', description: 'Fail (exit 1) on any warning — used by CI' },
|
|
96
|
+
{ command: 'flo doctor --json', description: 'Emit a single JSON doc with per-check + per-subcheck details (for CI/smoke gates)' },
|
|
97
|
+
{ command: 'flo doctor -c swarm', description: 'Run only the swarm + agent + task coordinator-path tripwire (epic #798)' },
|
|
98
|
+
{ command: 'flo doctor -c hive-mind', description: 'Run only the hive-mind MessageBus + shared-coordinator tripwire' },
|
|
99
99
|
],
|
|
100
100
|
action: async (ctx) => {
|
|
101
101
|
const showFix = ctx.flags.fix;
|