App-karr
view release on metacpan or search on metacpan
lib/App/karr/Foundation.pm view on Meta::CPAN
# ABSTRACT: Single-shot foundation daemon â periodic agent execution across karr boards
package App::karr::Foundation;
our $VERSION = '0.401';
use Moo;
use MooX::Options (
usage_string => 'USAGE: karr-foundation [options]',
);
use Carp qw( croak );
use Path::Tiny;
use YAML::XS ();
use Time::Piece;
use Digest::MD5 qw( md5_hex );
use Try::Tiny;
use App::karr::Git;
use App::karr::BoardStore;
use App::karr::Foundation::Runner;
use App::karr::Foundation::State;
use App::karr::Foundation::Overview;
# Instruction handed to a synthesized agent command via the $PROMPT variable
# when neither the .karr file nor the config overrides it.
our $DEFAULT_PROMPT =
'Use the karr-coordinator skill: pick the next actionable task on this '
. 'board, complete it, and move it forward. If you cannot proceed, block '
. 'the task with a reason.';
option config => (
is => 'ro',
format => 's',
doc => 'Path to config file (default: ~/.config/karr-foundation/config.yml)',
);
option command => (
is => 'ro',
format => 's',
doc => 'Global agent command; overrides .karr file per-repo',
);
option force => (
is => 'ro',
doc => 'Run agent even if no board change detected and no open tasks',
);
option dry_run => (
is => 'ro',
doc => 'Print what would run without executing',
);
option verbose => (
is => 'ro',
doc => 'Extra output',
);
option status => (
is => 'ro',
doc => 'Print a read-only overview of every board and exit (no agent runs)',
);
has _stream_to_terminal => (
is => 'lazy',
builder => sub { -t STDOUT || $_[0]->verbose },
);
has _config_data => (
is => 'lazy',
builder => '_build_config_data',
);
sub _build_config_data {
my ( $self ) = @_;
my $cfg_path = defined $self->config
? path( $self->config )
: path( $ENV{HOME} )->child( '.config', 'karr-foundation', 'config.yml' );
( run in 2.272 seconds using v1.01-cache-2.11-cpan-6de40a662fe )