SkillsCommand

Class
extends BaseCommand
Final: Yes

Synchronizes packaged Fast Forward skills into the consumer repository.

Description

This command SHALL ensure that the consumer repository contains the expected .agents/skills directory structure backed by the packaged skill set. The command MUST verify that the packaged skills directory exists before any synchronization is attempted. If the target skills directory does not exist, it SHALL be created before the synchronization process begins.

The synchronization workflow is delegated to PackagedDirectorySynchronizer. This command MUST act as an orchestration layer only: it prepares the source and target paths, triggers synchronization, and translates the resulting status into Symfony Console output and process exit codes.

Attributes
#[AsCommand]
$name : 'skills'
$description : 'Synchronizes Fast Forward skills into .agents/skills directory.'
$help : 'This command ensures the consumer repository contains linked Fast Forward skills by creating symlinks to the packaged skills and removing broken links.'

Table of Contents

Interfaces

LoggerAwareCommandInterface

Defines the logger contract consumed by reusable command result helpers.

Constants

 = '.agents/skills'

Properties

Methods

__construct()

Initializes the command with an optional skills synchronizer instance.

 : mixed
addJsonOption()

Adds the standard JSON output options to the current command.

 : static
configure()

Configures the supported JSON output option.

 : void
execute()

Executes the skills synchronization workflow.

 : int
isJsonOutput()

Determines whether JSON output was requested.

 : bool
isPrettyJsonOutput()

Determines whether pretty JSON output was requested.

 : bool
failure()

Logs a failed command result and returns the failure exit code.

 : int
notice()

Logs an informational command message at notice level.

 : void
success()

Logs a successful command result and returns the success exit code.

 : int
Constants

Constants

SKILLS_DIRECTORY

Private
private mixed SKILLS_DIRECTORY = '.agents/skills'
Properties

$logger

Private Read-only
private LoggerInterface $logger
Methods

__construct()

Public

Initializes the command with an optional skills synchronizer instance.

public __construct(PackagedDirectorySynchronizer  $synchronizer, FilesystemInterface  $filesystem, LoggerInterface  $logger) : mixed
Parameters

Description

the synchronizer responsible for applying the skills synchronization process

$filesystem : FilesystemInterface

Description

filesystem used to resolve and manage the skills directory structure

$logger : LoggerInterface

Description

logger used for command feedback

addJsonOption()

Protected

Adds the standard JSON output options to the current command.

protected addJsonOption() : static
Return values
static

configure()

Protected

Configures the supported JSON output option.

protected configure() : void

execute()

Protected

Executes the skills synchronization workflow.

protected execute(InputInterface  $input, OutputInterface  $output) : int

Description

This method SHALL:

  • announce the start of synchronization;
  • resolve the packaged skills path and consumer target directory;
  • fail when the packaged skills directory does not exist;
  • create the target directory when it is missing;
  • delegate synchronization to PackagedDirectorySynchronizer;
  • return a success or failure exit code based on the synchronization result.

The command MUST return self::FAILURE when packaged skills are not available or when the synchronizer reports a failure. It MUST return self::SUCCESS only when synchronization completes successfully.

Parameters
$input : InputInterface

Description

the console input instance provided by Symfony

$output : OutputInterface

Description

the console output instance used to report progress

Return values
int

Description

The process exit status. This MUST be self::SUCCESS on success and self::FAILURE on failure.

isJsonOutput()

Protected

Determines whether JSON output was requested.

protected isJsonOutput(InputInterface  $input) : bool

Description

The pretty-json flag SHALL imply JSON output.

Parameters
$input : InputInterface
Return values
bool

isPrettyJsonOutput()

Protected

Determines whether pretty JSON output was requested.

protected isPrettyJsonOutput(InputInterface  $input) : bool
Parameters
$input : InputInterface
Return values
bool

failure()

Private

Logs a failed command result and returns the failure exit code.

private failure( string  $message, InputInterface  $input[, array<string, mixed>  $context = []][, string|null  $file = null][, int|null  $line = null]) : int
Parameters
$message : string

Description

the failure message

$input : InputInterface

Description

the originating command input

$context : array<string, mixed> = []

Description

optional extra log context

$file : string|null = null

Description

the related file path when known

$line : int|null = null

Description

the related line when known

Return values
int

notice()

Private

Logs an informational command message at notice level.

private notice( string  $message, InputInterface  $input[, array<string, mixed>  $context = []]) : void
Parameters
$message : string

Description

the notice message

$input : InputInterface

Description

the originating command input

$context : array<string, mixed> = []

Description

optional extra log context

success()

Private

Logs a successful command result and returns the success exit code.

private success( string  $message, InputInterface  $input[, array<string, mixed>  $context = []][, string  $logLevel = LogLevel::INFO]) : int
Parameters
$message : string

Description

the success message

$input : InputInterface

Description

the originating command input

$context : array<string, mixed> = []

Description

optional extra log context

$logLevel : string = LogLevel::INFO

Description

the PSR-3 log level used for the successful result

Return values
int